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.


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

javarush.test.level26.lesson10.home02

/ Мир не меняется, меняемся мы. Разберитесь с ConcurrentHashMap В отдельном файле создайте класс Producer, который будет: 1. каждые полсекунды выводить на консоль с новой строки начиная с 1 фразу [Some text for i], пример «Some text for 1» 2. при возникновении исключения выводить в консоль [[TREAD_NAME] thread was terminated], пример "[thread-1] thread was terminated" /

задачу Валидатору пропихнул, но поток у меня не останавливается, то есть вывод у меня такой:
Some text for 1
Some text for 2
Some text for 3
Some text for 4
[pool-1-thread-1] thread was terminated
Some text for 5
Some text for 6
Some text for 7
Some text for 8
Some text for 9
Some text for 10
Some text for 11
Some text for 12
Some text for 13
Some text for 14
… и т.д.

Код в Producer такой:
public void run()
{
int i = 1;
while (true)
{
try
{
System.out.println(String.format(«Some text for %d», i++));
Thread.sleep(500);
}
catch (InterruptedException e)
{
System.out.println(String.format("[%s] thread was terminated", Thread.currentThread().getName()));
}
}
}

в помощи по задачам мне посоветовали читать доки:
читаю
ListshutdownNow()
Attempts to stop all actively executing tasks, halts the processing of waiting tasks, and returns a list of the tasks that were awaiting execution.
This method does not wait for actively executing tasks to terminate. Use awaitTermination to do that.

There are no guarantees beyond best-effort attempts to stop processing actively executing tasks. For example, typical implementations will cancel via Thread.interrupt(), so any task that fails to respond to interrupts may never terminate.

насколько понял, гарантий остановки нет и некоторые выполняемые задачи могут оставаться не остановлеными…

Прошу помочь разобраться :)
p.s. и что с этой фигней надо сделать, что она уже остановилась Thread.interrupt() делать пробовал.
  • ,

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());
    }
}
  • ,

level19.lesson10.bonus03 - не проходит тест:(

Коллеги, приветствую!
Помогите с данной задачей. Перепробовал все возможные проверочные варианты из предыдущих веток — все выводит так как надо. Но сервер упорно требует что-то еще...:)
Заранее благодарю!

package com.javarush.test.level19.lesson10.bonus03;

/* Знакомство с тегами
Считайте с консоли имя файла, который имеет HTML-формат
Пример:
Info about Leela <span xml:lang="en" lang="en"><b><span>Turanga Leela
</span></b></span><span>Super</span><span>girl</span>
Первым параметром в метод main приходит тег. Например, "span"
Вывести на консоль все теги, которые соответствуют заданному тегу
Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле
Количество пробелов, \n, \r не влияют на результат
Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нету
Тег может содержать вложенные теги
Пример вывода:
<span xml:lang="en" lang="en"><b><span>Turanga Leela</span></b></span>
<span>Turanga Leela</span>
<span>Super</span>
<span>girl</span>

Шаблон тега:
<tag>text1</tag>
<tag text2>text1</tag>
<tag
text2>text1</tag>

text1, text2 могут быть пустыми
*/


}

level18.lesson10.bonus02

Не понятно, как инкрементировать ID.

Если нужно искать самый большой ID во всем файле и инкрементировать его, то что делать когда он будет 99999999? Судя по условию, расширять длину ID нельзя, что остаётся? Делать ли его 1? А если в начале такой ID уже был?

И даже если так, то когда я один раз перейду этот барьер, то код все равно будет находить максимальный ID из всего файла, который равен 99999999 и после этого каждый следующий ID будет 1. Так может быть нужно последний инкрементировать и все?

/* Прайсы
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
*/
  • ,

level18.lesson10.bonus03; - не проходит проверку

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

Прайсы 2
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id — 8 символов
productName — название товара, 30 chars (60 bytes)
price — цена, 8 символов
quantity — количество, 4 символа
-u — обновляет данные товара с заданным id
-d — производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id)

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

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

import java.io.*;
import java.util.ArrayList;
public class Solution {
    public static void main(String[] args) throws IOException
    {
        ArrayList<String> lines = new ArrayList<>();
        if (args[0].equals("-u"))
        {
            //приводим к необходимому виду
            String uid=args[1];
            if (uid.length()<8) {
                int k=8-uid.length();
                for (int i=0;i<k;i++)
                {
                    uid=uid+" ";
                }
            }else
            {
                uid=uid.substring(0,8);
            }
            String pn=args[2];
            if (pn.length()<30) {
                int k=30-pn.length();
                for (int i=0;i<k;i++)
                {
                    pn=pn+" ";
                }
            } else
            {
                pn=pn.substring(0,30);
            }
            String price=args[3];
            if (price.length()<8) {
                int k=8-price.length();
                for (int i=0;i<k;i++)
                {
                    price=price+" ";
                }
            }  else
            {
                price=price.substring(0,8);
            }
            String quan=args[4];
            if (quan.length()<4) {
                int k=4-quan.length();
                for (int i=0;i<k;i++)
                {
                    quan=quan+" ";
                }
            }else
            {
                quan=quan.substring(0,4);
            }
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String name =reader.readLine();
            BufferedReader in = new BufferedReader(new FileReader(name));
            String line;
            reader.close();
            while ((line=in.readLine())!= null) {
                lines.add(line);
            }
            in.close();
            //определяем позицию которую надо заменить
            int pos=0;
            for (int i=0;i<lines.size();i++)
            {
                String id="";
                for (int j=0;j<8;j++)
                {
                    if (lines.get(i).charAt(j)!=' ')
                    {
                        id=id+lines.get(i).charAt(j);
                    }
                }
                if (Integer.parseInt(uid)==Integer.parseInt(id))
                {
                    pos=i;
                }
            }
            String finalline=uid+pn+price+quan;
            lines.set(pos,finalline);
            BufferedWriter out = new BufferedWriter(new FileWriter(name));
            for (int i=0;i<lines.size();i++)
            {
                out.write(lines.get(i));
                out.newLine();
            }
            out.close();
        } else
        {
            if (args[0].equals("-d"))
            {
                String uid=args[1];
                if (uid.length()<8) {
                    int k=8-uid.length();
                    for (int i=0;i<k;i++)
                    {
                        uid=uid+" ";
                    }
                }else
                {
                    uid=uid.substring(0,8);
                }
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                String name =reader.readLine();
                BufferedReader in = new BufferedReader(new FileReader(name));
                String line;
                reader.close();
                while ((line=in.readLine())!= null) {
                    lines.add(line);
                }
                in.close();
                //определяем позицию которую надо заменить
                int pos=0;
                for (int i=0;i<lines.size();i++)
                {
                    String id="";
                    for (int j=0;j<8;j++)
                    {
                        if (' '!=lines.get(i).charAt(j))
                        {
                            id=id+lines.get(i).charAt(j);
                        }
                    }
                    int fi=Integer.parseInt(id);
                    int cuid=Integer.parseInt(args[1]);
                    if (cuid==fi)
                    {
                        pos=i;
                    }
                }
                lines.set(pos,""); // пробовал и lines.delete(pos);
                BufferedWriter out = new BufferedWriter(new FileWriter(name));
                for (int i=0;i<lines.size();i++)
                {
                    out.write(lines.get(i));
                    out.newLine();
                }
                out.close();
            }
        }
    }
}


И опять впух… все работает верно… прошу помочь понять, что не нравится валидатору. p.s. возможно проблема в том, что при обновлении таблицы будет лишний перевод коретки на новую строку…
  • ,

level10.lesson11.home08;

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

package com.javarush.test.level10.lesson11.home08;

import com.sun.xml.internal.fastinfoset.util.StringArray;

import java.util.ArrayList;




/* Массив списков строк
Создать массив, элементами которого будут списки строк. Заполнить массив любыми данными и вывести их на экран.
*/

public class Solution
{
    public static void main(String[] args)
    {
        ArrayList<String>[] arrayOfStringList =  createList();
        printList(arrayOfStringList);
    }

    public static ArrayList<String>[] createList()
    {
        ArrayList<String>[] list = new ArrayList[3];
        list[0] = new ArrayList<>();
        list[0].add("aaa");
        list[0].add("ffff");
        list[1] = new ArrayList<>();
        list[1].add("aaa");
        list[1].add("adf");
        list[2] = new ArrayList<>();
        list[2].add("fff");
        list[2].add("asdf");

        return list;
    }

    public static void printList(ArrayList<String>[] arrayOfStringList)
    {
        for (ArrayList<String> list: arrayOfStringList)
        {
            for (String s : list)
            {
                System.out.println(s);
            }
        }
    }
}

Как стоило бы закрывать файлы в задаче level18.lesson10.home09?

Условие задачи:

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

level35.lesson10.task02

Добрый день, мой код не проходит проверку. В чем может быть проблема?
/* extends vs super
Логика всех методов — добавить source в destination.
!!! Расставьте ?, extends и super где необходимо:!!!
1) one — должен работать с одним и тем же типом;
2) two — должен добавлять любых наследников типа T в список, умеющий хранить только тип T;
3) three — должен добавлять объекты типа T в любой список, параметризированный любым родительским классом;
4) four — должен добавлять любых наследников типа T в список, параметризированный любым родительским классом.
Не оставляйте закомментированный код.
*/

import java.util.List;
public abstract class Solution {
    public abstract <T> void one(List<T> destination, List<T> source);

    public abstract <T> void two(List<? extends T> destination, List<T> source);

    public abstract <T> void three(List<T> destination, List<? super T> source);

    public abstract <T> void four(List<? extends T> destination, List<? super T> source);
}
  • ,

com.javarush.test.level18.lesson10.home06

ПОЖАЛУЙСТА, поправьте условие задачи!!! Посчитать не частоту а количество повторений!!!, а то решаю уже пару часов и не понимаю в чем проблема, все работает вроде, а проверку не проходит. В задаче com.javarush.test.level18.lesson10.home02 под словом частота имелся один смысл а тут уже частота стала количеством повторений символа в файле.

com.javarush.test.level18.lesson10.home09 не проходит после обновления сервера

Первый раз за 18 уровней обращаюсь на форум за помощью. Обычно 95% задач решается с 1-2, ну максимум с третьего раза. Валидатор на отрез отказывается принимать решение. Версия IDEA 14. Плагин тоже обновленный. Пробовал уже перебором найти что я делаю не так с точки зрения валидатора.

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


Мой вариант решения номер один:

import java.io.*;

public class Solution
{
    public static void main(String[] args)
    {
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String fileName = null;
            FileInputStream flow = null;

            boolean isExit = false;
            while (!isExit)
            {
                try
                {
                    fileName = reader.readLine();
                    flow = new FileInputStream(fileName);

                    flow.close();
                }
                catch (FileNotFoundException e)
                {
                    isExit = true;
                    System.out.println(fileName);
                }
            }

            reader.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}


Последовательность действий в отладчике:
1. Передаем существующий файл (D:/data.txt)
2. Происходит чтение строки из консоли и создание потока
3. Закрываем созданный поток и идем на новую итерацию
4. Предаем имя не существующего файла (D:/blabla.txt)
5. В конструкторе потока
FileInputStream(fileName)
вылетает
FileNotFoundException
исключение и управление передается в бок
catch
до вызова
flow.close()
. При этом в переменную
flow
ссылка на новый поток не запишется, так как он не был создан, и поэтому его в
catch
закрывать не нужно. То есть если на первой итерации передано не корректное имя, то ни один поток не будет инициализирован и закрывать будет нечего. Программа уйдет выполнять
catch

6. В
catch
все просто.

Я знаю что

flow = new FileInputStream(fileName);
flow.close();


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

Возможно дело в том что у меня нет условия выхода типа

fileName = reader.readLine();
if(fileName != null)
{
    flow = new FileInputStream(fileName);
    flow.close();
}
else
{
    isExit = true;
}


Короче помогите разобраться в чем дело. Интерес уже спортивный. Черт с ней со статистикой.