• 0.00

  • +0.42

level22.lesson09.task03 - ни в какую не принимается!!!

package com.javarush.test.level22.lesson09.task03;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;


/* Составить цепочку слов
В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставить все слова в таком порядке,
чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Метод getLine должен возвращать любой вариант.
Слова разделять пробелом.
В файле не обязательно будет много слов.

Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн

Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
*/
public class Solution {
    public static void main(String[] args) throws Exception {

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

        BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
        String[] words = fileReader.readLine().split(" ");
        fileReader.close();

        StringBuilder result = getLine(words);
        System.out.println(result.toString());
    }

    public static StringBuilder getLine(String... words) {
        if (words == null || words.length == 0) return null;
        StringBuilder sb = new StringBuilder();
        for (String s : words) {
            if (!sb.toString().contains(s)) {
                if (sb.toString().isEmpty()) {
                    sb.append(s + " ");
                } else {
                    String sbFirstChar = sb.toString().trim().substring(0, 1);
                    String sbLastChar = sb.toString().trim().substring(sb.toString().trim().length() - 1);
                    String wordFirstChar = s.substring(0, 1);
                    String wordLastChar = s.substring(s.length() - 1);

                    if (sbFirstChar.equalsIgnoreCase(wordLastChar)) {
                        sb.insert(0, s + " ");
                    } else if (sbLastChar.equalsIgnoreCase(wordFirstChar)) {
                        sb.append(s + " ");
                    }
                }
            }
        }
        return sb;
    }
}


Что я упустил??? Проверки сделал, все равно чего-то не хватает компилятору

level19.lesson10.bonus01 Не проходит тестирование, помогите!

Перечитал кучу топиков, сделал решение которое работает, не могу понять в чем проблема! Никак не хочет проходить тестирование, воистину, самое сложно задание которое было до этого!!! Ребята, в чем проблема, почему не хочет принимать?:(((
Условие уже написал «исправленное», так как оригинальное условие содержит ошибку.
package com.javarush.test.level19.lesson10.bonus01;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/* Отслеживаем изменения
Считать в консоли 2 имени файла - file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME
Пример:
оригинальный   редактированный    общий
file1:         file2:             результат:(lines)

строка1        строка1            SAME строка1
cтрока2                           REMOVED строка2
строка3        строка3            SAME строка3
строка4                           REMOVED строка4
строка5        строка5            SAME строка5
               строка0            ADDED строка0
строка1        строка1            SAME строка1
строка2                           REMOVED строка2
строка3        строка3            SAME строка3
               строка5            ADDED строка5
строка4        строка4            SAME строка4
строка5                           REMOVED строка5
*/

public class Solution {
    public static List<LineItem> lines = new ArrayList<LineItem>();

    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = bufferedReader.readLine();
        String fileName2 = bufferedReader.readLine();

        bufferedReader.close();
        BufferedReader fileReader1 = new BufferedReader(new FileReader(fileName1));
        BufferedReader fileReader2 = new BufferedReader(new FileReader(fileName2));
        while (fileReader1.ready() || fileReader2.ready()) {
            if (fileReader1.ready() && fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                String s2 = fileReader2.readLine();
                if (s1.equals(s2)) {
                    lines.add(new LineItem(Type.SAME, s1));
                } else if ("".equals(s1)) {
                    lines.add(new LineItem(Type.ADDED, s2));
                } else if ("".equals(s2)) {
                    lines.add(new LineItem(Type.REMOVED, s1));
                }
            } else if (!fileReader1.ready() && fileReader2.ready()) {
                String s2 = fileReader2.readLine();
                lines.add(new LineItem(Type.ADDED, s2));
            } else if (fileReader1.ready() && !fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                lines.add(new LineItem(Type.REMOVED, s1));
            }
        }
        fileReader1.close();
        fileReader2.close();
    }

    public static enum Type {
        ADDED,        //добавлена новая строка
        REMOVED,      //удалена строка
        SAME          //без изменений
    }

    public static class LineItem {
        public Type type;
        public String line;

        public LineItem(Type type, String line) {
            this.type = type;
            this.line = line;
        }
    }
}

level19.lesson10.home09 READER-обертка, помогите!

Моя программа в двух вариантах, и ни один из вариантов не проходит проверку на сервере! подскажите, в чем может быть дело?
<em>/* Контекстная реклама
В методе main подмените объект System.out написанной вами реадер-оберткой
Ваша реадер-обертка должна выводить на консоль контекстную рекламу после каждого второго println-а
Вызовите готовый метод printSomething(), воспользуйтесь testString
Верните переменной System.out первоначальный поток

Рекламный текст: "JavaRush - курсы Java онлайн"

Пример вывода:
first
second
JavaRush - курсы Java онлайн
third
fourth
JavaRush - курсы Java онлайн
fifth
*/</em>

— Вариант 1:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

public class Solution {

    public static void main(String[] args) {
        PrintStream originalConsolePrintStream = System.out;
        ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
        PrintStream customOutputStream = new PrintStream(byteArray);
        System.setOut(customOutputStream);
        new TestString().printSomething();

        System.setOut(originalConsolePrintStream);

        String lines[] = byteArray.toString().split(System.lineSeparator());
        for (int i = 0; i < lines.length; i++) {
            System.out.println(lines[i]);
            if (i % 2 != 0) {
                System.out.println("JavaRush - курсы Java онлайн");
            }
        }

    }

    public static class TestString {
        public void printSomething() {
            System.out.println("first");
            System.out.println("second");
            System.out.println("third");
            System.out.println("fourth");
            System.out.println("fifth");
        }
    }
}

— Вариант 2
import java.io.*;

public class Solution {

    public static void main(String[] args) {
        PrintStream orig = System.out;
        System.setOut(new outputStreamDecorator(orig));
        TestString t = new TestString();
        t.printSomething();
        System.setOut(orig);

    }

    public static class TestString {
        public void printSomething() {
            System.out.println("first");
            System.out.println("second");
            System.out.println("third");
            System.out.println("fourth");
            System.out.println("fifth");
        }
    }

    static class outputStreamDecorator extends PrintStream {
        String ad = "JavaRush - курсы Java онлайн";
        static int counter = 0;
        public outputStreamDecorator(OutputStream out) {
            super(out);
        }

        public void println(String s) {
            super.println(s);
            counter++;
            if (counter % 2 == 0 ){
                super.println(ad);
            }
        }
    }
}

Сервер опять умер?

Не могу сдать задачу с шести утра (специально пораньше встал позаниматься!), плагин при проверке задачи пишет «НЕИЗВЕСТНАЯ ОШИБКА ПРИ РАБОТЕ С СЕРВЕРОМ».
Что за дела? Сервер починят?

level19.lesson10.home03 Задваивается результат

Всем привет, помогите, почему в консоли задваивается результат 1-го человека из списка?
Задание
/* Хуан Хуанович
В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя день месяц год
где [имя] - может состоять из нескольких слов, разделенных пробелами, и имеет тип String
[день] - int, [месяц] - int, [год] - int
данные разделены пробелами

Заполнить список PEOPLE импользуя данные из файла
Закрыть потоки. Не использовать try-with-resources

Пример входного файла:
Иванов Иван Иванович 31 12 1987
Вася 15 5 2013
*/

Код:
package com.javarush.test.level19.lesson10.home03;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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

    public static void main(String[] args) throws IOException, ParseException {
        BufferedReader reader = new BufferedReader(new FileReader(args[0]));
        while (reader.ready()) {
            StringBuilder name = new StringBuilder();
            StringBuilder date = new StringBuilder();
            String[] data = reader.readLine().split(" ");
            for (String d : data) {
                try {
                    date.append(Integer.parseInt(d));
                    if (d.length() == 1) {
                        d = "0" + d;
                    }
                    date.append(" ");
                } catch (NumberFormatException e) {
                    name.append(d);
                    name.append(" ");
                }
            }
            String nameString = name.toString().trim();
            Date birthday = new SimpleDateFormat("dd MM yyyy").parse(date.toString().trim());
            PEOPLE.add(new Person(nameString, birthday));
            for (Person p : PEOPLE) {
                System.out.println(p.getName() + " " + p.getBirthday());
            }
        }
        reader.close();
    }
}


Файл peoples.txt
Иванов Иван Иванович 31 12 1987
Вася 15 5 2013


Вывод программы в консоль:
Иванов Иван Иванович Thu Dec 31 00:00:00 MSK 1987
Иванов Иван Иванович Thu Dec 31 00:00:00 MSK 1987
Вася Wed May 15 00:00:00 MSK 2013

Process finished with exit code 0

Считаем кол-во слов world - ПРОШУ ПОМОЩИ

Ни в какую не хочет проходить тест((( В чем моя ошибка? Вот код с заданием:
package com.javarush.test.level19.lesson05.task02;

/* Считаем слово
Считать с консоли имя файла.
Файл содержит слова, разделенные знаками препинания.
Вывести в консоль количество слов "world", которые встречаются в файле.
Закрыть потоки. Не использовать try-with-resources
*/

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;


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

        int counter = 0;

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()));

        String[] words = fileReader.readLine().split("\\W+");

        for (int i = 0; i < words.length; i++) {
            if ("world".equals(words[i])) {
                counter++;
            }
        }

        System.out.println(counter);

        reader.close();
        fileReader.close();
    }
}

level18.lesson10.bonus02 не проходит тестирование

Ребята, прошу помощи! По моему мнению программа выполняется корректно, не могу сообразить где ошибка, валидатор не хочет принимать задачу!(
package com.javarush.test.level18.lesson10.bonus02;

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

import java.io.*;
import java.util.Locale;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws Exception {
        String action = args[0];
        String productName = args[1];
        String price = args[2];
        String quantity = args[3];
        Scanner scanner = new Scanner(System.in);
        String fileName = scanner.next();
        scanner.close();
        File file = new File(fileName);
        if (action.equals("-c")) {
            add(file, productName, price, quantity);
        }
    }

    static void add(File file, String productName, String price, String quantity) {
        try {
            int id = 0;
            Scanner fileNameScanner = new Scanner(file);
            while (fileNameScanner.hasNextLine()) {
                int curID = Integer.parseInt(fileNameScanner.nextLine().substring(0, 8).trim());
                if  (curID > id){
                    id = curID;
                }
            }
            fileNameScanner.close();
            PrintWriter printWriter = new PrintWriter(new FileOutputStream(file, true));
            printWriter.printf(Locale.US,"%n%-8d%-30s%-8s%s", id + 1, productName, price, quantity);
            printWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}

level18.lesson10.home10 "Собираем файл из кусочков" - проблемы, HELP

Друзья, никак не могу сдать задание, проверят на текстовых файлах — нормально работает, все как по условию, но проверку на сервере ни в какую не хочет проходить( Что я упусти?
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.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Solution
{
    public static void main(String[] args)
    {
        Set<String> fileNameSet = new TreeSet<>();
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext())
        {
            String line = scanner.nextLine();
            if ("end".equals(line))
            {
                break;
            }
            fileNameSet.add(line);
        }
        scanner.close();

        Iterator<String> fileNameIter = fileNameSet.iterator();
        String fullFilePartName = fileNameIter.next();
        String fullFileName = fullFilePartName.substring(0, fullFilePartName.lastIndexOf(".part"));
        File file = new File(fullFileName);
        try
        {
            FileOutputStream fileOutputStream = new FileOutputStream(file, true);
            for (String s : fileNameSet)
            {
                FileInputStream fileInputStream = new FileInputStream(s);
                byte[] buffer = new byte[fileInputStream.available()];
                fileInputStream.read(buffer);
                fileOutputStream.write(buffer);
                fileOutputStream.flush();
                fileInputStream.close();
            }
            fileOutputStream.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}