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

task13.task1328

6. Изменить код согласно новой архитектуре и добавить новую логику:

6.1. Сделать класс AbstractRobot абстрактным, вынести логику атаки и защиты из Robot в AbstractRobot.

6.2. Отредактировать класс Robot учитывая AbstractRobot.

6.3. Расширить класс BodyPart новой частью тела BodyPart.CHEST(«грудь«).

6.4. Добавить новую часть тела в реализацию интерфейсов Attackable и Defensable (в классе AbstractRobot).

public final class BodyPart
{
final static BodyPart LEG = new BodyPart(«нога»);
final static BodyPart HEAD = new BodyPart(«голова»);
final static BodyPart ARM = new BodyPart(«рука»);
final static BodyPart CHEST = new BodyPart(«грудь»);

private String bodyPart;

private BodyPart(String bodyPart)
{
this.bodyPart = bodyPart;
}

@Override
public String toString()
{
return this.bodyPart;
}
}

public class Robot extends AbstractRobot
{

private String name;

public Robot(String name)
{
this.name = name;
}

public String getName()
{
return name;
}

}

public abstract class AbstractRobot implements Attackable, Defensable
{
private static int hitCount;

public abstract String getName();

public BodyPart attack()
{
BodyPart attackedBodyPart = null;
hitCount = hitCount + 1;

if (hitCount == 1)
{
attackedBodyPart = BodyPart.ARM;
} else if (hitCount == 2)
{
attackedBodyPart = BodyPart.HEAD;
}
else if (hitCount == 3)
{

attackedBodyPart = BodyPart.LEG;
}
else if (hitCount == 4)
{
hitCount = 0;
attackedBodyPart = BodyPart.CHEST;
}
return attackedBodyPart;
}

public BodyPart defense()
{
BodyPart defencedBodyPart = null;
hitCount = hitCount + 1;

if (hitCount == 1)
{
defencedBodyPart = BodyPart.HEAD;
} else if (hitCount == 2)
{
defencedBodyPart = BodyPart.LEG;
}
else if (hitCount == 3)
{
defencedBodyPart = BodyPart.ARM;
}
else if (hitCount == 4)
{
hitCount = 0;
defencedBodyPart = BodyPart.CHEST;
}
return defencedBodyPart;
}

}

Валидатор говорит, что проблема в логике атаки и защиты. Но я пробовал абсолютно все варианты. Кто знает в чем проблема, буду очень благодарен.

task13.task1326

Сортировка четных чисел из файла
1. Ввести имя файла с консоли.
2. Прочитать из него набор чисел.
3. Вывести на консоль только четные, отсортированные по возрастанию.

Требования:
1. Программа должна считывать данные с консоли.
2. Программа должна вывести на экран все четные числа считанные из файла отсортированные по возрастанию.
3. Программа должна выводить данные на экран.
4. Программа должна закрывать поток чтения из файла(FileInputStream).

И все бы хорошо, если бы не надо было использовать именно FileInputStream

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.io.FileInputStream;
import java.io.InputStream;

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
InputStream fin = new FileInputStream (keyReader.readLine());

keyReader.close();
ArrayListlist = new ArrayList();

///fileReader.read(); // удаляем первый символ

while (fin.available() > 0 ){

int a = fin.read();
if (a % 2 == 0) {
list.add(a);
}
}
Collections.sort(list);
for (Integer i: list) {
System.out.println(i);
}

// напишите тут ваш код c:/temp/txt.txt

fin.close();
}
}

С любым другим классом работает, кроме этого. Что не так?
  • ,

task31.3101 неправильный вывод

Друзья, помогите пожалуйста. Проблема такая, задачу решил, валидатор скушал, но вывод получается неправильный. Понимаю, что-то не так с компаратором, но что именно допереть не могу. Без компаратора читает и пишет из директорий хорошо, но соответственно без сортировки. С сортировкой получается приведенный ниже вывод.Пробовал вынести из try-with-resources — вообще не сортирует. Подскажите что не так, хочется понять.

java.lang.NumberFormatException В плагине JavaRush Task

Добрый день. При выполнении задач JavaRush через плагин для IDEA получаю вот такую ошибку.
Exception in thread «main» java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at com.javarush.task.task10.task1017.Solution.main(Solution.java:17)

Process finished with exit code 1
При этом, если тот же код запустить просто в IDEA (не в плагине) или на сайте, все работает. Буду благодарен за помощь. (Не так давно всё было хорошо и подобных ошибок не вылетало)
На всякий случай код ниже.


package com.javarush.task.task05.task0532;

import java.io.*;

/* 
Задача по алгоритмам
*/

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(reader.readLine());
        int maximum = Integer.MIN_VALUE;
        for (int i = 0; i < N; ++i){
            int temp = Integer.parseInt(reader.readLine());
            if (temp > maximum){
                maximum = temp;
            }

        }


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

        System.out.println(maximum);
    }
}

task.task18.task1827

Коллеги! Объясните мне тупому почему не принимает валидатор мое решение. Кто решил — скиньте пожалуйста свое решение на vik.piter@gmail.com
Программа все делает правильно… но не принимает!
Уже не могу сидеть на этом задании…

Прайсы


CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.

Программа запускается со следующим набором параметров:
-c productName price quantity

Значения параметров:
где id — 8 символов.
productName — название товара, 30 chars (60 bytes).
price — цена, 8 символов.
quantity — количество, 4 символа.

-c — добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле.

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity

Данные дополнены пробелами до их длины.

Пример:
19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
19847983 Куртка для сноубордистов, разм10173.991234

Требования:
1. Программа должна считать имя файла для операций CrUD с консоли.
2. При запуске программы без параметров список товаров должен остаться неизменным.
3. При запуске программы с параметрами "-c productName price quantity" в конец файла должна добавится новая строка с товаром.
4. Товар должен иметь следующий id, после максимального, найденного в файле.
5. Форматирование новой строки товара должно четко совпадать с указанным в задании.
6. Созданные для файлов потоки должны быть закрыты.

package com.javarush.task.task18.task1827;

/* 
Прайсы
*/

import java.io.*;
import java.nio.Buffer;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws Exception {

        if (args[0].equals("-c") && args.length == 4) {


            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String fileName = reader.readLine();
            reader.close();

            // получаем параметры для прибавления

            String productName = args[1];
            if (productName.length() > 30) {
                productName = args[1].substring(0, 29);
            } else {
                while ((30 - productName.length()) != 0) {
                    productName += " ";
                }
            }

            String price = args[2];
            if (price.length() > 8) {
                price = args[2].substring(0, 7);
            } else {
                while ((8 - price.length()) != 0) {
                    price += " ";
                }
            }

            String quantity = args[3];
            if (quantity.length() > 4) {
                quantity = args[3].substring(0, 3);
            } else {
                while ((4 - quantity.length()) != 0) {
                    quantity += " ";
                }
            }

            // нашли id который надо прибавить
            FileReader fileReader = new FileReader(fileName);
            StringBuilder sb = new StringBuilder();
            while (fileReader.ready()) {
                sb.append((char) fileReader.read());
            }
            fileReader.close();

            String sub2parse = sb.toString().substring(sb.toString().length() - 50, sb.toString().length() - 42);

            StringBuilder sb2 = new StringBuilder();

            Integer t;
            for (char c : sub2parse.toCharArray()) {
                t = Integer.parseInt(String.valueOf©);
                if (t instanceof Integer) {


                }

                if (c != ' ') {
                    sb2.append©;
                }
            }


            double id = Double.parseDouble(sb2.toString());


            if (id < 99999999) {
                id++;
            }

            // добавили к id нужные пробелы
            String idString = Double.toString(id);
            if (idString.length() < 8) {
                while ((8 - idString.length()) != 0) {
                    idString += " ";
                }
            }

            // генерим нашу выстраданную строчку
            String string = idString + productName + price + quantity;

            // считываем все в массив
            BufferedReader br = new BufferedReader(new FileReader(fileName));
            ArrayList<String> ss = new ArrayList<String>();
            while (br.ready()) {
                ss.add(br.readLine());
            }
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
            for (String str : ss) {
                bw.write(str);
            }
            bw.write(string);
            bw.close();


        }
    }
}

task 0824 или самое прекрасное задание. Работает правильно но не проходит проверку

и ко всему прочему, этот код проходит «типа компиляцию» на сервере однако компилируя джава файл через cmd (javac) компилятор ругается на созданный «типа разработчиками» переопределенный метод класса Human, а именно — метод toString()
Так как соответствовать тексту задания КОТОРОЕ ВОЗМОЖНО ПОНЯТЬ ЛИШЬ ИМЕННО ТАК КАК НУЖНО ПОТОМУ ЧТО ВСЕ РАСПИСАНО ИДЕАЛЬНО И ВОПРОСОВ ПО ЗАДАНИЮ СОВЕРШЕННО НЕ ВОЗНИКАЕТ...

task0803. Задача "Коллекция HashMap из котов"

Всем привет) Это мое первое сообщение на форуме) Сегодня только зарегался) Я вот задачу решил, но не проходит проверку. Не могу понять, почему
Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.

Требования:
1. Объяви переменную коллекции HashMap с типом элементов String, Cat и сразу проинициализируй ee.
2. Программа не должна считывать значения с клавиатуры.
3. Метод addCatsToMap()должен добавлять в коллекцию 10 котов, согласно условию.
4. Программа должна выводить содержимое коллекции на экран, каждую пару через дефис и с новой строки.

Вот мой код:
public class Solution {
    public static void main(String[] args) throws Exception {
        String[] cats = new String[]{"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};
        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet()) {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }

    public static HashMap<String, Cat> addCatsToMap(String[] cats) {
        HashMap<String,Cat> my = new HashMap<>();
        for (int i = 0; i <cats.length ; i++)
        {
            String name = "Котяра"+i;
            my.put(cats[i],new Cat(name));
        }
        return my;
    }

    public static class Cat {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}
  • ,

task24.task2413(7), Баг валидатора? Прошу помочь.(РЕШЕНО)

Добрый день. Прошу помощи упёрся в задание арканоид(7) вроде всё правильно, но валидатор выдаёт нечто непонятное.
Задание:
Арканоид(7)
Теперь перейдем к классу BaseObject.
Я хочу сделать несколько предложений.
Во-первых для простоты считать все объекты у нас будут круглыми.
Нет, отрисовывать их мы будем фигурными, как и раньше.
А вот при расчетах из взаимодействия исходить из того, что они круглые.
Так — гораздо проще.
Во-вторых. Пусть координаты объектов и радиус будут вещественными числами.
Это придаст плавность движениям и точность всем вычислениям.
А при отрисовке мы будем их округлять.
Итак:
а) Добавь в класс BaseObject приватные поля x (double), y (double), radius (double).
б) Добавь геттеры и сеттеры.
в) Добавь конструктор BaseObject(double x, double y, double radius).
г) Пройдись по все классам-наследникам и поправь у них конструкторы.
Если вы пользуйтесь Intellij IDEA — Alt+Insert вам в помощь.

Требования:
1. В классе BaseObject должно быть создано приватное поле x типа double.
2. В классе BaseObject должно быть создано приватное поле y типа double.
3. В классе BaseObject должно быть создано приватное поле radius типа double.
4. В классе BaseObject должен быть создан корректно работающий конструктор с тремя параметрами типа double (x, y, radius).
5. В классе Ball должен быть создан корректно работающий конструктор с тремя параметрами типа double (x, y, radius).
6. В классе Brick должен быть создан корректно работающий конструктор с тремя параметрами типа double (x, y, radius).
7. В классе Stand должен быть создан корректно работающий конструктор с тремя параметрами типа double (x, y, radius).
8. В классе BaseObject должен быть создан публичный геттер для поля x.
9. В классе BaseObject должен быть создан публичный геттер для поля y.
10. В классе BaseObject должен быть создан публичный геттер для поля radius.
11. В классе BaseObject должен быть создан публичный сеттер для поля x.
12. В классе BaseObject должен быть создан публичный сеттер для поля y.
13. В классе BaseObject должен быть создан публичный сеттер для поля radius.

package com.javarush.task.task24.task2413;

/**
 * Created by Женя on 22.06.2017.
 */
public abstract class BaseObject {
    private double x;
    private double y;
    private double radius;

    abstract void draw(Canvas canvas);

    abstract void move();

    public BaseObject(double x, double y, double radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }

    public double getRadius() {
        return radius;
    }

    public void setX(double x) {
        this.x = x;
    }

    public void setY(double y) {
        this.y = y;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }
}


результат тестирования: В классе BaseObject должен быть создан корректно работающий конструктор с тремя параметрами типа double (x, y, radius).На мой взгляд всё в соответствии с заданием. Подскажите что не так.

task40.task4008 | level40.lesson40.task02 - РЕШЕНО

Не могу пройти валидацию. Одно требование я выполнил, из тех, что не проходили, но ещё два — никак. Уже не знаю, что делать.

Вот условие задачи:

Работа с Java 8 DateTime API
Выполни задание, используя Java 8 DateTime API.
Реализуй метод printDate(String date).
Он должен в качестве параметра принимать дату (в одном из 3х форматов)
и выводить ее в консоль в соответствии с примером:
1) Для «21.4.2014 15:56:45» вывод должен быть:
День: 21
День недели: 1
День месяца: 21
День года: 111
Неделя месяца: 4
Неделя года: 17
Месяц: 4
Год: 2014
AM или PM: PM
Часы: 3
Часы дня: 15
Минуты: 56
Секунды: 45
2) Для «21.4.2014»:
День: 21
День недели: 1
День месяца: 21
День года: 111
Неделя месяца: 4
Неделя года: 17
Месяц: 4
Год: 2014
3) Для «17:33:40»:
AM или PM: PM
Часы: 5
Часы дня: 17
Минуты: 33
Секунды: 40

А вот мой код:

public static void printDate(String date) {
            //напишите тут ваш код
            if (date == null || (date != null && date.isEmpty()))
                return;
            try {
                LocalDate localDate = LocalDate.parse(date,DateTimeFormatter.ofPattern("d.M.u"));
                System.out.println("День: " + localDate.get(ChronoField.DAY_OF_MONTH));
                System.out.println("День недели: " + localDate.getDayOfWeek().getValue());
                System.out.println("День месяца: " + localDate.getDayOfMonth());
                System.out.println("День года: " + localDate.getDayOfYear());
                System.out.println("Неделя месяца:  " + localDate.format(DateTimeFormatter.ofPattern("W")) /*+ " " +  (localDate.get(ChronoField.ALIGNED_WEEK_OF_MONTH) + 1 )*/);
                System.out.println("Неделя года: " + (localDate.get(ChronoField.ALIGNED_WEEK_OF_YEAR) + 1));
                System.out.println("Месяц: " + localDate.getMonthValue());
                System.out.println("Год: " + localDate.getYear());
                return;
            } catch (DateTimeParseException e) {
            }
            try {
                LocalTime localTime = LocalTime.parse(date,DateTimeFormatter.ofPattern("H:m:s"));
                System.out.println("AM или PM: " + ((localTime.get(ChronoField.AMPM_OF_DAY) == 0)? "AM":"PM"));
                System.out.println("Часы: " + localTime.get(ChronoField.HOUR_OF_AMPM));
                System.out.println("Часы дня: " + localTime.get(ChronoField.HOUR_OF_DAY));
                System.out.println("Минуты: " + localTime.getMinute());
                System.out.println("Секунды: " + localTime.getSecond());
                return;
            } catch (DateTimeParseException e) {
            }
            try {
                LocalDateTime dateTime = LocalDateTime.parse(date,DateTimeFormatter.ofPattern("d.M.u H:m:s"));
                System.out.println("День: " + dateTime.get(ChronoField.DAY_OF_MONTH));
                System.out.println("День недели: " + dateTime.getDayOfWeek().getValue());
                System.out.println("День месяца: " + dateTime.getDayOfMonth());
                System.out.println("День года: " + dateTime.getDayOfYear());
                System.out.println("Неделя месяца:  " + dateTime.format(DateTimeFormatter.ofPattern("W")) /*(dateTime.get(ChronoField.ALIGNED_WEEK_OF_MONTH) + 1 )*/);
                System.out.println("Неделя года: " + (dateTime.get(ChronoField.ALIGNED_WEEK_OF_YEAR) + 1));
                System.out.println("Месяц: " + dateTime.getMonthValue());
                System.out.println("Год: " + dateTime.getYear());
                System.out.println("AM или PM: " + ((dateTime.get(ChronoField.AMPM_OF_DAY) == 0)? "AM":"PM"));
                System.out.println("Часы: " + dateTime.get(ChronoField.HOUR_OF_AMPM));
                System.out.println("Часы дня: " + dateTime.get(ChronoField.CLOCK_HOUR_OF_DAY));
                System.out.println("Минуты: " + dateTime.getMinute());
                System.out.println("Секунды: " + dateTime.getSecond());
                return;
            } catch (DateTimeParseException e) {
            }
        }


Не проходят эти требования:
1. Если в метод printDate передана дата в формате «дата время», он должен вывести: День, День недели, День месяца, День года, Неделя месяца, Неделя года, Месяц, Год, AM или PM, Часы, Часы дня, Минуты, Секунды.
2. Если в метод printDate передана дата в формате «дата», он должен вывести: День, День недели, День месяца, День года, Неделя месяца, Неделя года, Месяц, Год.

А эти — проходят:

3. Если в метод printDate передана дата в формате «время», он должен вывести: AM или PM, Часы, Часы дня, Минуты, Секунды.
4. Используй статический метод parse классов LocalDate и LocalTime.


Сам думаю на вывод дня и вывод номера недели (в месяце). Также может быть что-то в выводе номера недели в году. Но это всё работает. Сравнивал с предыдущей задачей, которая прошла.
  • ,

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

package com.javarush.task.task11.task1123;

public class Solution {
public static void main(String[] args) throws Exception {
int[] data = new int[]{1, 2, 3, 5, -2, -8, 0, 77, 5, 5};

Pair<Integer, Integer> result = getMinimumAndMaximum(data);

System.out.println(«Minimum is » + result.x);
System.out.println(«Maximum is » + result.y);
}

public static Pair<Integer, Integer> getMinimumAndMaximum(int[] array) {
if (array == null || array.length == 0) {
return new Pair<Integer, Integer>(null, null);
}
else{
//Напишите тут ваше решение
for (int i = array.length — 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (array[j] > array [j+1]){
int num = array[j];
array[j] = array[j+1];
array[j+1] = num;
}
}
}
}
return new Pair<Integer, Integer>(array[0], array[9]);
}

public static class Pair<X, Y> {
public X x;
public Y y;

public Pair(X x, Y y) {
this.x = x;
this.y = y;
}
}

}