Смотритель: hubert
  • ,

level08.lesson11.bonus03

Добрый день!
Подскажите, пожалуйста, где спряталась ошибка:
public static void sort(String[] array)
    {
        String helpList;
        for (int i = 1; i < array.length; i++) {
            for (int b = (array.length - 1); b >= i; b--) {
                if (array[b].charAt(0) == array[b - 1].charAt(0)) {
                    if (isGreaterThen(array[b], array[b - 1])) {
                        for (int a = 1; a < array[b - 1].length() - 1; a++) {
                            if (array[b].charAt(a) < array[b - 1].charAt(a)) {
                                helpList = array[b - 1];
                                array[b - 1] = array[b];
                                array[b] = helpList;
                                break;
                            }
                        }
                    } else {
                        for (int a = 1; a < array[b].length() - 1; a++) {
                            if (array[b].charAt(a) < array[b - 1].charAt(a)) {
                                helpList = array[b - 1];
                                array[b - 1] = array[b];
                                array[b] = helpList;
                                break;
                            }
                        }

                    }
                } else if (array[b].charAt(0) < array[b - 1].charAt(0)) {
                    helpList = array[b - 1];
                    array[b - 1] = array[b];
                    array[b] = helpList;
                }
            }
        }


    }

    //Метод для сравнения строк: 'а' больше чем 'b'
    public static boolean isGreaterThen(String a, String b)
    {
        return a.compareTo(b) >= 0;
    }
}

Ошибка возникает на стадии определения идентичных символов в строках, с индексом 0;
Берутся 2 строки из массива, количество пробежек по строке должно быть ограничено размером меньшей из 2 строк -1; Но через раз ловится ошибка — индекс элемента в строке превышен. Уже мозг себе вывихнул, пытаясь понять где происходит косяк. Главное подозрение падает на внутренний цикл замены элементов:
helpList = array[b - 1];
      array[b - 1] = array[b];
      array[b] = helpList;
  • ,

level16.lesson07.task02

Видимо я опять неправильно догадался чего хотели получить создатели курса.
Прошу помочь понять чего хотят в этой программе, методов решения много тесты они не проходят.

package com.javarush.test.level16.lesson07.task02;

/* Stopwatch (Секундомер)
2. Реализуй логику метода doSeveralSteps так, чтобы учитывалась скорость бегуна.
2.1. Метод getSpeed() в классе Runner показывает, сколько шагов в секунду делает бегун.
Нужно, чтобы бегун действительно делал заданное количество шагов в секунду.
Если Иванов делает 4 шага в секунду, то за 2 секунды он сделает 8 шагов.
Если Петров делает 2 шага в секунду, то за 2 секунды он сделает 4 шага.
2.2. Метод sleep в классе Thread принимает параметр типа long.
*/

МЕТОД №1
private void doSeveralSteps() throws InterruptedException {
stepNumber++;
//add your code here — добавь код тут
Thread.sleep(1000L);
System.out.println(owner.getName() + " делает шаг №" + (stepNumber *owner.getSpeed())+ "!");
}
Вывод:
Petrov делает шаг №2.0!
Ivanov делает шаг №4.0!
Petrov делает шаг №4.0!
Ivanov делает шаг №8.0!

МЕТОД №2
private void doSeveralSteps() throws InterruptedException {
//add your code here — добавь код тут
Thread.sleep(1000L);
stepNumber = stepNumber + (int)owner.getSpeed();
System.out.println(owner.getName() + " делает шаг №" + stepNumber+ "!");
}
Вывод:
Ivanov делает шаг №4!
Petrov делает шаг №2!
Ivanov делает шаг №8!
Petrov делает шаг №4!

МЕТОД №3
private void doSeveralSteps() throws InterruptedException {
//add your code here — добавь код тут
Thread.sleep(1000L);
stepNumber +=owner.getSpeed();
System.out.println(owner.getName() + " делает шаг №" + stepNumber+ "!");
Вывод:
Petrov делает шаг №2!
Ivanov делает шаг №4!
Ivanov делает шаг №8!
Petrov делает шаг №4!
  • ,

level09.lesson11.home04

Ребята, почему не проходит? В программе выводит только на русском языке, надо на английском. Почитал туториал перевода языка не нашёл(
package com.javarush.test.level09.lesson11.home04;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/* Конвертер дат
Ввести с клавиатуры дату в формате «08/18/2013»
Вывести на экран эту дату в виде «AUG 18, 2013».
Воспользоваться объектом Date и SimpleDateFormat.
*/

public class Solution {

    public static void main(String[] args) {
        //Напишите тут ваш код

        Date date = new Date("08/18/2013");
        SimpleDateFormat sf = new SimpleDateFormat("MMM dd, yyyy");
        System.out.println(sf.format(date).toUpperCase());

       }
}
  • ,

level06.lesson05.task03

Добрый день!

Программа успешно прошла тестирование.

Но смущает тот факт, что ни разу не высветилось сообщение «Cat destroyed» или «Dog destroyed», как предусмотрено в коде.
Насколько это нормально? Правильно ли я выполнил задание?

/* 10 000 объектов Cat и Dog
Создать в цикле 10 000 объектов Cat и Dog. (Java-машина должна начать уничтожать неиспользуемые, и метод finalize хоть раз да вызовется).
*/
  • ,

level17.lesson04.task04

Всё сделал однако не проходит задача
package com.javarush.test.level17.lesson04.task04;

/* Синхронизированный президент
И снова Singleton паттерн - синхронизация в статическом блоке
Внутри класса OurPresident в статическом блоке создайте синхронизированный блок.
Внутри синхронизированного блока инициализируйте president.
*/

public class Solution {
    public static class OurPresident {

        private static OurPresident president;
        static
        {
            synchronized (president)
            {
                president=new OurPresident();
            }
        }
        private OurPresident() {
        }
        public static OurPresident getOurPresident() {
            
            return president;
        }
    }
}
  • ,

level09.lesson11.home03

вроде все условия соблюдены и работает даже. но проверку не проходит. add пробовал как list.add(0,number) так и list.add(number); а то условие сохранить порядок ввода не совсем понятно какой именно порядок. но все равно не принимается.
public static void readData(ArrayListlist)
{

try
{
while (true)
{
Scanner scanner = new Scanner(System.in);
Integer number = scanner.nextInt();
list.add(0,number);
}
}
catch (InputMismatchException e)
{
//System.out.println(e.getStackTrace());

}
finally
{
for (Integer integer: list) {
System.out.println(integer);
}
}
}
  • ,

level09.lesson08.task01

Подскажте, как перехватить FileNotFoundException понимаю, это RuntimeException.
package com.javarush.test.level09.lesson08.task01;

import java.io.FileNotFoundException;
import java.net.URISyntaxException;
import java.util.HashMap;

/* Исключения
Есть метод, который выбрасывает два исключения унаследованные от Exception и два унаследованных от RuntimeException:
NullPointerException, ArithmeticException, FileNotFoundException, URISyntaxException.

Нужно перехватить NullPointerException и FileNotFoundException, но не перехватывать
ArithmeticException и URISyntaxException. Как это сделать?
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        //Напишите тут ваш код
        try
        {

        method1();
        }


        catch  (NullPointerException e)
        {
              System.out.println("   ");
        }
        catch ( FileNotFoundException e)
        {
            String s =e.getMessage();
            System.out.println(s);
        }

        //Напишите тут ваш код

    }

    public static void method1() throws  ArithmeticException, URISyntaxException //, FileNotFoundException
    {
        int i = (int) (Math.random() * 4);
    //    if (i == 0)
  //         throw new NullPointerException();
        if (i == 1)
            throw new ArithmeticException();
     // if (i == 2)
       // throw new FileNotFoundException();
        if (i == 3)
            throw new URISyntaxException("", "");


    }
}
  • ,

level06.lesson08.task05

Доброго времени суток, подскажи пожалуйста.
Я наверное не совсем понял условие…
package com.javarush.test.level06.lesson08.task05;

/* Класс StringHelper
Cделать класс StringHelper, у которого будут 2 статических метода:
String multiply(String s, int count) – возвращает строку повторенную count раз.
String multiply(String s) – возвращает строку повторенную 5 раз.
Пример:
Амиго -> АмигоАмигоАмигоАмигоАмиго
*/

public class StringHelper
{
    public static String multiply(String s)
    {
        String result = s;
        //Напишите тут ваш код
        for (int i=0;i<5;i++)
            System.out.println(result);
        return result;
    }

    public static String multiply(String s, int count)
    {
        String result = s;
        //Напишите тут ваш код
        for (int i=0;i<count;i++)
            System.out.println(result);
        return result;
    }
  • ,

level15.lesson12.home05

Прошу Вашей помощи программа никак не хочет проходить тестирование,
надеюсь создатели задач в курсе были что модификатор доступа private не генерируется в IJ в общем надеюсь на помощь.

package com.javarush.test.level15.lesson12.home05;

/* Перегрузка конструкторов
1. В классе Solution создайте по 3 конструктора для каждого модификатора доступа.
2. В отдельном файле унаследуйте класс SubSolution от класса Solution.
3. Внутри класса SubSolution создайте конструкторы командой Alt+Insert -> Constructors.
4. Исправьте модификаторы доступа конструкторов в SubSolution так, чтобы они соответствовали конструкторам класса Solution.
*/

public class Solution {
public Solution(Object pub1){}
public Solution(String pub2){}
public Solution(Integer pub3){}

protected Solution(Character prot1){}
protected Solution(Double prot2){}
protected Solution(Exception prot3){}

private Solution(Number priv1){};
private Solution(Boolean priv2){};
private Solution(Float priv3){};
}

файл SubSolution
package com.javarush.test.level15.lesson12.home05;

public class SubSolution extends Solution
{
public SubSolution(Object pub1)
{
super(pub1);
}

public SubSolution(String pub2)
{
super(pub2);
}

public SubSolution(Integer pub3)
{
super(pub3);
}

protected SubSolution(Character prot1)
{
super(prot1);
}

protected SubSolution(Double prot2)
{
super(prot2);
}

protected SubSolution(Exception prot3)
{
super(prot3);
}
}
  • ,

Помогите понять как работает

Собственно написал код, проверку проходит, все ок. Теперь помогите понять как он работает :)

Вопросов у меня несколько (сам код ниже):
1. Почему нельзя удалять записи карты в for each, а нужно пользоваться неудобным итератором?
2. Утверждение в п.1 только для карты справедливо?
3. Почему собственно записи удаляются строкой
iterator.remove();
а не
map.remove(data.getKey())


Код:
package com.javarush.test.level08.lesson08.task04;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/* Удалить всех людей родившихся летом
Создать словарь (Map<String, Date>), и занести в него десять записей по принципу: «фамилия» - «дата рождения».
Удалить из словаря всех людей, родившихся летом.
*/

public class Solution
{
    public static HashMap<String, Date> createMap()
    {
        HashMap<String, Date> map = new HashMap<String, Date>();
        map.put("Сталлоне", new Date("JUNE 1 1980"));
        map.put("fadfaе", new Date("JULY 1 1980"));
        map.put("fadgadаллоне", new Date("JULY 1 1980"));
        map.put("Стdfadе", new Date("JUNE 1 1980"));
        map.put("Стаdsfdafллоне", new Date("JUNE 1 1980"));
        map.put("Сталsdfsdлоне", new Date("JUNE 1 1980"));
        map.put("Сталsfdasafлоне", new Date("JUNE 1 1980"));
        map.put("Сталлsagadfgоне", new Date("JUNE 1 1980"));
        map.put("Сталлsdfsdfsоне", new Date("JUNE 1 1980"));
        map.put("Сталлstttdfsdfsоне", new Date("JUNE 1 1980"));

        //Напишите тут ваш код
      return map;
    }

    public static void removeAllSummerPeople(HashMap<String, Date> map)
    {
        //Напишите тут ваш код
        Map.Entry<String,Date> data;
        Iterator<Map.Entry<String,Date>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            data = iterator.next();

            if ((data.getValue().getMonth()>4) && (data.getValue().getMonth()<8))
            iterator.remove();
        }



    }



}
  • ,

level08.lesson11.home09

возвращает результат согласно условию, но не засчитывается. может кто сталкивался?
public class Solution
{
public static void main(String[] args) throws ParseException
{
Date da = new Date();

SimpleDateFormat format = new SimpleDateFormat(«MMM dd yyyy», Locale.US);
String dateTime = format.format(da).toUpperCase();
isDateOdd(dateTime);
}

public static boolean isDateOdd(String date) throws ParseException
{
Date yearStartTime = new Date();
yearStartTime.setHours(0);
yearStartTime.setMinutes(0);
yearStartTime.setSeconds(0);
yearStartTime.setDate(1);
yearStartTime.setMonth(0);

SimpleDateFormat format = new SimpleDateFormat(«MMM dd yyyy»,Locale.US);
Date dq = format.parse(date);
long maTimeDistance = dq.getTime() — yearStartTime.getTime();

long msDay = 24 * 60 * 60 * 1000;

int dayCount = (int) (maTimeDistance / msDay);

if (dayCount % 2 == 0)
{
return false;
}
return true;
}
}

level09.lesson11.bonus02

Троха незрозумів умову тому пробував, ще варіант считати ім я файла «джерла», зчитати знову якшо невірне і тоді вже считувати ім я файла «призначення». В обох випадках не пройшло тестування.

import java.io.*;

/* Нужно добавить в программу новую функциональность
Задача: Программа вводит два имени файла. И копирует первый файл на место заданное вторым именем.
Программа вводит два имени файла. И копирует первый файл на место заданное вторым именем. Если файла (который нужно копировать) с указанным именем не существует, программа должна вывести надпись «Файл не существует.» и еще раз прочитать имя файла с консоли.
*/
.....