• ,

level17.lesson10.bonus01 подскажите где ошибка. всё работает, но тест не проходит

package com.javarush.test.level17.lesson10.bonus01;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/* CRUD
CrUD - Create, Update, Delete
Программа запускается с одним из следующих наборов параметров:
-c name sex bd
-u id name sex bd
-d id
-i id
Значения параметров:
name - имя, String
sex - пол, "м" или "ж", одна буква
bd - дата рождения в следующем формате 15/04/1990
-c  - добавляет человека с заданными параметрами в конец allPeople, выводит id (index) на экран
-u  - обновляет данные человека с данным id
-d  - производит логическое удаление человека с id
-i  - выводит на экран информацию о человеке с id: name sex (м/ж) bd (формат 15-Apr-1990)

id соответствует индексу в списке
Все люди должны храниться в allPeople
Используйте Locale.ENGLISH в качестве второго параметра для SimpleDateFormat

Пример параметров: -c Миронов м 15/04/1990
*/

public class Solution {
    public static List<Person> allPeople = new ArrayList<Person>();

    static {
        allPeople.add(Person.createMale("Иванов Иван", new Date()));  //сегодня родился    id=0
        allPeople.add(Person.createMale("Петров Петр", new Date()));  //сегодня родился    id=1
    }

    public static void main(String[] args) {
        if (args.length < 2 || args.length > 6 || args.length == 3) {
            return;
        }
        try {
            if (args[0].equals("-c")) {     // create new person and add this to ArrayList
                switch (args[2]) {          // switch sex
                    case "м":
                        allPeople.add(Person.createMale(args[1], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                        System.out.println(allPeople.size() - 1);
                        break;
                    case "ж":
                        allPeople.add(Person.createFemale(args[1], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                        System.out.println(allPeople.size() - 1);
                        break;
                    default:
                        break;
                }
            }

            int id = Integer.parseInt(args[1]);

            switch (args[0]) {              // switch command
                case "-d":                  // remove person with id xxx
                    allPeople.remove(id);
                    break;
                case "-u":                  // update person with id xxx
                    switch (args[3]) {      // switch sex
                        case "м":
                            allPeople.set(id, Person.createMale(args[2], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                            break;
                        case "ж":
                            allPeople.set(id, Person.createFemale(args[2], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                            break;
                    }
                    break;
                case "-i":              // info about person with id xxx
                    System.out.println((allPeople.get(id)).toString());
                    break;
                default:
                    break;
            }
        } catch (ParseException | NumberFormatException ignored) {

        }
    }
}


и второй класс

package com.javarush.test.level17.lesson10.bonus01;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Person {
    private String name;
    private Sex sex;
    private Date birthDay;

    private Person(String name, Sex sex, Date birthDay) {
        this.name = name;
        this.sex = sex;
        this.birthDay = birthDay;
    }

    public static Person createMale(String name, Date birthDay) {
        return new Person(name, Sex.MALE, birthDay);
    }

    public static Person createFemale(String name, Date birthDay) {
        return new Person(name, Sex.FEMALE, birthDay);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    public Date getBirthDay() {
        return birthDay;
    }

    public void setBirthDay(Date birthDay) {
        this.birthDay = birthDay;
    }

    public String toString() {
        String out;
        if (sex.equals(Sex.MALE))
            out = "м";
        else
            out = "ж";

        SimpleDateFormat format1 = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
        return name + " " + out + " " + format1.format(getBirthDay());
    }
}
  • ,

level17.lesson10.bonus01 подскажите где ошибка. всё работает, но тест не проходит

package com.javarush.test.level17.lesson10.bonus01;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/* CRUD
CrUD - Create, Update, Delete
Программа запускается с одним из следующих наборов параметров:
-c name sex bd
-u id name sex bd
-d id
-i id
Значения параметров:
name - имя, String
sex - пол, "м" или "ж", одна буква
bd - дата рождения в следующем формате 15/04/1990
-c  - добавляет человека с заданными параметрами в конец allPeople, выводит id (index) на экран
-u  - обновляет данные человека с данным id
-d  - производит логическое удаление человека с id
-i  - выводит на экран информацию о человеке с id: name sex (м/ж) bd (формат 15-Apr-1990)

id соответствует индексу в списке
Все люди должны храниться в allPeople
Используйте Locale.ENGLISH в качестве второго параметра для SimpleDateFormat

Пример параметров: -c Миронов м 15/04/1990
*/

public class Solution {
    public static List<Person> allPeople = new ArrayList<Person>();

    static {
        allPeople.add(Person.createMale("Иванов Иван", new Date()));  //сегодня родился    id=0
        allPeople.add(Person.createMale("Петров Петр", new Date()));  //сегодня родился    id=1
    }

    public static void main(String[] args) {
        if (args.length < 2 || args.length > 6 || args.length == 3) {
            return;
        }
        try {
            if (args[0].equals("-c")) {     // create new person and add this to ArrayList
                switch (args[2]) {          // switch sex
                    case "м":
                        allPeople.add(Person.createMale(args[1], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                        System.out.println(allPeople.size() - 1);
                        break;
                    case "ж":
                        allPeople.add(Person.createFemale(args[1], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                        System.out.println(allPeople.size() - 1);
                        break;
                    default:
                        break;
                }
            }

            int id = Integer.parseInt(args[1]);

            switch (args[0]) {              // switch command
                case "-d":                  // remove person with id xxx
                    allPeople.remove(id);
                    break;
                case "-u":                  // update person with id xxx
                    switch (args[3]) {      // switch sex
                        case "м":
                            allPeople.set(id, Person.createMale(args[2], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                            break;
                        case "ж":
                            allPeople.set(id, Person.createFemale(args[2], new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(args[args.length - 1])));
                            break;
                    }
                    break;
                case "-i":              // info about person with id xxx
                    System.out.println((allPeople.get(id)).toString());
                    break;
                default:
                    break;
            }
        } catch (ParseException | NumberFormatException ignored) {

        }
    }
}


и второй класс

package com.javarush.test.level17.lesson10.bonus01;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Person {
    private String name;
    private Sex sex;
    private Date birthDay;

    private Person(String name, Sex sex, Date birthDay) {
        this.name = name;
        this.sex = sex;
        this.birthDay = birthDay;
    }

    public static Person createMale(String name, Date birthDay) {
        return new Person(name, Sex.MALE, birthDay);
    }

    public static Person createFemale(String name, Date birthDay) {
        return new Person(name, Sex.FEMALE, birthDay);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    public Date getBirthDay() {
        return birthDay;
    }

    public void setBirthDay(Date birthDay) {
        this.birthDay = birthDay;
    }

    public String toString() {
        String out;
        if (sex.equals(Sex.MALE))
            out = "м";
        else
            out = "ж";

        SimpleDateFormat format1 = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
        return name + " " + out + " " + format1.format(getBirthDay());
    }
}

level18.lesson10.home10 Народ, нужен свежий взгляд. Что тут не так?


package com.javarush.test.level18.lesson10.home10;

/* Собираем файл
Собираем файл из кусочков
Считывать с консоли имена файлов
Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end"
В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN]. Например, Lion.avi
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю.
Закрыть потоки. Не использовать try-with-resources
*/

import java.io.*;
import java.util.*;


public class Solution {
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        List<String> list = new ArrayList<String>();
        String s;
        while (!"end".equals(s = reader.readLine()))
        {
            list.add(s);
        }
        reader.close();
        Map<Integer, String> map = new TreeMap<Integer, String>();
        for (String x : list)
        {
            for (int i = 0; i <= list.size(); i++)
            {
                if (x.endsWith("part" + (i)))
                {
                    map.put(i, x);
                }
            }
        }
        File file = new File("c:/1/Lion.avi");

        FileOutputStream out = new FileOutputStream(file, true);
        for (Map.Entry<Integer, String> pair : map.entrySet())
        {
            FileInputStream in = new FileInputStream(pair.getValue());
            byte[] buff = new byte[in.available()];
            if (in.available() > 0)
            {
                int count = in.read(buff);
                out.write(buff, 0, count);
            }
            in.close();
        }
        out.close();

    }
}


Народ, нужен свежий взгляд. Что тут не так?

level27.lesson15.big01 Задание 2. Прошу помощи! Тестирование заболело

Заранее извиняюсь за повторное создание темы.
Это задание просто отказывается проходить тесты!
Само задание:
Задание 2
1. Мы много работаем с консолью. Пора создать единую точку взаимодействия.
Создайте класс ConsoleHelper с единственным BufferedReader, через который будете работать с консолью.
Запомните, этот класс не хранит никаких данных и состояний, поэтому все методы будут статическими.
Создайте в нем три метода:
-writeMessage(String message) - для вывода message в консоль
-String readString() - для чтения строки с консоли
-List<Dish> getAllDishesForOrder() - просит ползователя выбрать блюдо и добавляет его в список. Введенное 'exit' означает завершение заказа.
исключения пробрасывайте выше, на этом уровне не понятно, что с ними делать.

2. Отрефакторьте код - работа с консолью должна быть только через класс ConsoleHelper

3. Вернемся к классу Order: в нем есть ссылка на планшет, и еще есть список выбранных блюд.
Создайте поле dishes - список блюд. Инициализируйте его в конструкторе, вызвав метод getAllDishesForOrder из ConsoleHelper.

4. Перепишите метод toString в классе Order. Пусть он возвращает пустую строку, если нет блюд в заказе, иначе
вывод должен быть аналогичный примеру в порядке добавления блюд. Используйте ConsoleHelper.
Пример:
Your order: [Juice, Fish] of Tablet{number=5}

5. У нас все завязано на работу с консолью. Однако, при возникновении исключений, наше приложение умрет.
Чтобы узнать причину - добавим в Tablet статический логгер java.util.logging.Logger, инициализированный именем класса.

6. В методе createOrder класса Tablet обработаем исключения ввода-вывода.
Запишем в лог "Console is unavailable.". Уровень лога - SEVERE - это самый серьезный уровень, мы не можем работать.

7. Надо начинать тестировать наше приложение.
Добавьте в main создание планшета и создание заказа - new Tablet(5).createOrder();


Dish.java:
package com.javarush.test.level27.lesson15.big01.kitchen;

import java.util.Arrays;

/**
 Enum блюд
 */
public enum Dish
{
    Fish,
    Steak,
    Soup,
    Juice,
    Water;

    public static String allDishesToString()
    {
        StringBuilder sb = new StringBuilder(Arrays.toString(values()));
        sb.delete(sb.length() - 1, sb.length());
        sb.delete(0, 1);
        return sb.toString();
    }
}


ConsoleHelper.java:
package com.javarush.test.level27.lesson15.big01;

import com.javarush.test.level27.lesson15.big01.kitchen.Dish;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ConsoleHelper
{
    private static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static void writeMessage(String message)
    {
        System.out.println(message);
    }

    public static String readString() throws IOException
    {
        return reader.readLine();
    }

    public static List<Dish> getAllDishesForOrder() throws IOException
    {
        List<Dish> dishes = new ArrayList<>();
        String str;
        writeMessage("Enter dish...(" + Dish.allDishesToString() + ")");
        while (true)
        {
            str = readString();
            if ("exit".equalsIgnoreCase(str))
                break;

            try
            {
                dishes.add(Dish.valueOf(str));
            }
            catch (IllegalArgumentException e)
            {
                ConsoleHelper.writeMessage(str + " is not detected");
            }
        }
        return dishes;
    }
}

Order.java:
package com.javarush.test.level27.lesson15.big01.kitchen;

import com.javarush.test.level27.lesson15.big01.ConsoleHelper;
import com.javarush.test.level27.lesson15.big01.Tablet;

import java.io.IOException;
import java.util.List;

/**
 Заказ
 */
public class Order
{
    private List<Dish> dishes;
    private Tablet tablet;

    public Order(Tablet tablet) throws IOException
    {
        this.dishes = ConsoleHelper.getAllDishesForOrder();
        this.tablet = tablet;
    }

    @Override
    public String toString()
    {
        if (dishes == null || dishes.isEmpty())
            return "";
        else
            return "You order: " + dishes.toString() + " of " + tablet;
    }
}


Tablet.java:
package com.javarush.test.level27.lesson15.big01;

import com.javarush.test.level27.lesson15.big01.kitchen.Order;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 Планшет
 */
public class Tablet
{
    //номер планшета
    private final int number;
    private static Logger logger = Logger.getLogger(Tablet.class.getName());

    public Tablet(int number)
    {
        this.number = number;
    }

    public void createOrder()
    {
        Order order;
        try
        {
            order = new Order(this);
            ConsoleHelper.writeMessage(order.toString());
        }
        catch (IOException e)
        {
            logger.log(Level.SEVERE, "Console is unavailable.");
        }
    }

    @Override
    public String toString()
    {
        return "Tablet{number=" + number + '}';
    }
}


Вывод на экран:
Enter dish...(Fish, Steak, Soup, Juice, Water)
Fish
Soup
Wateeeer
Wateeeer is not detected
Steak
ExIt
You order: [Fish, Soup, Steak] of Tablet{number=5}
  • ,

level05.lesson12.bonus03

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int a = Integer.parseInt(reader.readLine());
        int maximum = 0;
        int b;
        if (a>0)
        {
            for (int i = 1; i <= a; i++)
            {
                b = Integer.parseInt(reader.readLine());
                if (maximum < b) maximum = b;
            }
            System.out.println(maximum);
        }
    }
}


Ребята яверы, помогите. В чём кроется ошибка? Всё работает нормально, ответы выдаёт верные, но код не принимается. Что поменять?
  • ,

level18.lesson10.home08

import java.io.*;
import java.util.HashMap;
import java.util.Map;

/* Нити и байты
Читайте с консоли имена файлов, пока не будет введено слово "exit"
Передайте имя файла в нить ReadThread
Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap,
где параметр String - это имя файла, параметр Integer - это искомый байт.
Закрыть потоки. Не использовать try-with-resources
*/

public class Solution {
    public static Map<String, Integer> resultMap = new HashMap<String, Integer>();


    public static void main(String[] args) throws IOException, InterruptedException
    {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

            String filename = reader.readLine();
            while (!filename.equals("exit"))
            {
                new ReadThread(filename).start();
                filename = reader.readLine();
            }

      /*  for (Map.Entry<String, Integer> pair : resultMap.entrySet())
        {
            System.out.println(pair.getKey() + " " + pair.getValue());
        }
    */


        reader.close();
    }

    public static class ReadThread extends Thread {

        String filename;
        public ReadThread(String fileName)
        {
            this.filename = fileName;

        }

        public void run()
        {
            try
            {
                Map <Integer, Integer> map = new HashMap<>();

                FileInputStream is = new FileInputStream(filename);

                int data = is.read();


                if (map.containsKey(data))
                {
                    map.put(data, map.get(data) + 1);
                }
                else
                {
                    map.put(data, 1);
                }
                
                is.close();

                int max = 0;

                for (Map.Entry<Integer, Integer> pair : map.entrySet())
                {

                    int key = pair.getKey();
                    int value = pair.getValue();

                    if (max < value)
                    {
                        max = value;
                    }

                    synchronized (resultMap)
                    {
                        resultMap.put(this.filename, key);
                    }

                }
            }
            catch (IOException e)
            {

            }
        }
    }
}

Друзья, помогите с задачей, выводит верно, валидатор не проходит. Потоки закрыты, hashmap синхронизирован, start вынес в main, но что-то неправильно, не могу понять что.
  • ,

level18.lesson10.home05

/* Округление чисел
Считать с консоли 2 имени файла
Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415
Округлить числа до целых и записать через пробел во второй файл
Закрыть потоки. Не использовать try-with-resources
Принцип округления:
3.49 - 3
3.50 - 4
3.51 - 4
-3.49 - -3
-3.50 - -3
-3.51 - -4
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException, NumberFormatException{

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String is1 = reader.readLine();
        String is2 = reader.readLine();



        BufferedReader reader1 = new BufferedReader(new FileReader(is1));

        FileWriter is = new FileWriter(is2);

        String[] result;


        result = reader1.readLine().split(" ");



        String x = "";

        
        for (int i = 0; i < result.length;i++ )
        {
            x += Math.round(Double.parseDouble(result[i])) + " ";
        }
        is.write(x.trim());


        reader1.close();
        is.close();

    }

}


Валидатор не принимает. Результат вроде выводит правильный, переписал без пробела в конце. Помогите пожалуйста, что не так в решении?

Баги с Code Sample на help.javarush.ru

Господа, ну явные же баги с обработкой кусков кода в вопросах на help.javarush.ru При нажатии кнопки Code Sample видимые теги в сообщении не появляются, а невидимые отрабатывают криво: если вводить код после кнопки, первые несколько строк всегда остаются за тегом. Вы уж дайте нам видеть теги разметки, (на программистов же учимся, не хухры-мухры =) ).

И вот это ещё: «используйте по крайней мере %d символов / 66 слова», оттуда же.

"Восьмяшки"

Салют, друзья!

Пару дней назад я подумал, что одним чтением лекций и решением типовых задач сыт не будешь. Во всяком случае, полученные знания нужно не просто отрабатывать на «кошках», но и куда-то направлять.

Конечно же, мне захотелось сделать игру ^_^.
Немного поразмыслив, нашёл наиболее доступной тему двумерных массивов («Пятнашки», 2048, Тетрис, да хоть змейку запускай!).

Восьмяшки, Console

Остановился на «Пятнашках» (благо, вырос на этой игре. Знаю, что и как там работает).
В общем, решение принято, код начал писаться. Перво-наперво всё опробовал в консоли. Поле 2х2 собирать для теста, конечно же, не комильфо. Слишком часто выпадают тупиковые комбинации. А вот 3х3 уже приятнее (кстати, именно из-за размеров поля было принято название игры). В процессе столкнулся с потоками (Наконец-то! Мы столкнулись лицом к лицу с врагом. Оказывается, их можно укротить и научить работать тебе на благо. Я счастлив)).

Работа с библиотекой SWING

Чуть позже просмотрел возможности библиотеки SWING и успешно облачил игру в какой-ни какой интерфейс.
Теперь в игре доступен выбор поля. Тест показал, что игра без проблем обрабатывает все ошибки. А при работе с полем 3х3 даёт 100% ответ на вопрос «Решается ли задача?».

К сожалению, примера кода под рукой не было. Пришлось всю логику писать самому. Возможно наличие велосипедов (если таковые есть, тыкните меня в них носом, пожалуйста).
Так же у меня огромные вопросы по чистоте и удобочитаемости кода. Очень хочется, чтобы меня если и не благодарили за чистый код, то уж точно не проклинали за мусор)))
И конечно же — наличие комментариев — где их не хватает?

Если у вас есть рекомендации/пожелания по коду — дайте знать. Если вы хотите присоединиться к проекту — дайте знать.

С удовольствием объединюсь с кем-нибудь для работы над этим и другими проектами.

ссылка на GitHub
  • ,

Как не заглядывать в решенные задачи(help.javarush)?

Вообщем много заглядываю в Help Javarush, и смотрю решение задач, потому что во многих задачах в условии дается то чего нет в лекциях, даже бывает в поисковиках тяжело найти. Как с этим бороться?)

18 Уровень дается мне очень тяжко уже 2 задача а я решить не могу подскажите что не так

18 Уровень дается мне очень тяжко уже 2 задача а я решить не могу подскажите что не так

package com.javarush.test.level18.lesson10.home09;

/* Файлы и исключения
Читайте с консоли имена файлов
Если файла не существует (передано неправильное имя файла), то
перехватить исключение FileNotFoundException,
вывести в консоль переданное неправильное имя файла и
завершить работу программы.
Закрыть потоки. Не использовать try-with-resources
Не используйте System.exit();
*/

import java.io.*;

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileReader fileInputStream =null;
        try{
            while (true){
                fileInputStream = new FileReader(reader.readLine());
            }
        }catch (FileNotFoundException e){
            System.out.println("передано неправильное имя файла");
            fileInputStream.close();
            return;
        }
        finally
        {  reader.close();
        }


    }

    }