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

package com.javarush.task.task20.task2002; подскажите что не так друзья!

package com.javarush.task.task20.task2002;

import java.io.*;
import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/* 
Читаем и пишем в файл: JavaRush

Реализуйте логику записи в файл и чтения из файла для класса JavaRush.
В файле your_file_name.tmp может быть несколько объектов JavaRush.
Метод main реализован только для вас и не участвует в тестировании.


Требования:
1. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список users пустой.
2. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список users не пустой.
3. Класс Solution.JavaRush не должен поддерживать интерфейс Serializable.
4. Класс Solution.JavaRush должен быть публичным.
5. Класс Solution.JavaRush не должен поддерживать интерфейс Externalizable.
*/
public class Solution {
    public static void main(String[] args) {
        //you can find your_file_name.tmp in your TMP directory or fix outputStream/inputStream according to your real file location
        //вы можете найти your_file_name.tmp в папке TMP или исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {
            File your_file_name = new File("c:\\0\\4.txt");
            OutputStream outputStream = new FileOutputStream(your_file_name);
            InputStream inputStream = new FileInputStream(your_file_name);

            JavaRush javaRush = new JavaRush();

            //формат даты SimpleDateFormat
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

            User ivan = new User();
            ivan.setFirstName("Иванов");
            ivan.setLastName("Иван");
            Date Bdate = new Date();
            Bdate = dateFormat.parse("01/05/1992");

            ivan.setBirthDate(Bdate);
            ivan.setMale(true);
            ivan.setCountry(User.Country.RUSSIA);

            User vasya = new User();
            vasya.setFirstName("Васильев");
            vasya.setLastName("Василий");
            Date bDate = new Date();
            bDate = dateFormat.parse("05/06/1976");
            vasya.setBirthDate(bDate);
            vasya.setMale(true);
            vasya.setCountry(User.Country.UKRAINE);

            javaRush.users.add(ivan);
            javaRush.users.add(vasya);



            //initialize users field for the javaRush object here - инициализируйте поле users для объекта javaRush тут
            javaRush.save(outputStream);

            outputStream.flush();

            JavaRush loadedObject = new JavaRush();
            loadedObject.load(inputStream);
            //check here that javaRush object equals to loadedObject object - проверьте тут, что javaRush и loadedObject равны
            if(javaRush.equals(loadedObject)){
                System.out.println("Загрузка прошла удачно");
            }else{
                System.out.println("Загрузка неудачна");
            }
            outputStream.close();
            inputStream.close();

/*
 //тестовая печать

            for(User u:javaRush.users){
                System.out.println(u.toString());
                System.out.println(u.getFirstName());
                System.out.println(u.getLastName());
                System.out.println(u.getBirthDate());
                System.out.println(u.isMale());
                System.out.println(u.getCountry());


                System.out.println("________________________");
            }

*/
        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with my file");
        } catch (Exception e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with save/load method");
        }
    }

    public static class JavaRush {
        public List<User> users = new ArrayList<>();

        public void save(OutputStream outputStream) throws Exception {
            //implement this method - реализуйте этот метод
            PrintWriter printWriter = new PrintWriter(outputStream);
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            printWriter.println("<newObject>");
            printWriter.println(users.size());
            if(users.size()>0){
                for(User u:users){
                    //printWriter.println(u);
                    printWriter.println(u.getFirstName());
                    printWriter.println(u.getLastName());
                    String sd = dateFormat.format(u.getBirthDate());

                    printWriter.println(sd);
                    printWriter.println(u.isMale());
                    printWriter.println(u.getCountry());
                }
            }

            printWriter.flush();
            printWriter.close();
        }

        public void load(InputStream inputStream) throws Exception {
            //implement this method - реализуйте этот метод
            BufferedReader fileReader = new BufferedReader(new InputStreamReader(inputStream));
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            String line;
            while ((line=fileReader.readLine())!=null) {
                if (line.equals("<newObject>")) {


                    int size = Integer.parseInt(fileReader.readLine());
                    for (int i = 0; i < size; i++) {
                        User user = new User();
                        user.setFirstName(fileReader.readLine());
                        user.setLastName(fileReader.readLine());
                        Date bd = new Date();
                        bd = dateFormat.parse(fileReader.readLine());
                        user.setBirthDate(bd);
                        user.setMale(Boolean.parseBoolean(fileReader.readLine()));
                        user.setCountry(User.Country.valueOf(fileReader.readLine()));

                        users.add(user);
                    }
                }


            }






            fileReader.close();
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            JavaRush javaRush = (JavaRush) o;

            return users != null ? users.equals(javaRush.users) : javaRush.users == null;

        }

        @Override
        public int hashCode() {
            return users != null ? users.hashCode() : 0;
        }
    }
}
  • ,

com.javarush.task.task05.task0525;

package com.javarush.task.task05.task0525;

/*
И целой утки мало
*/

public class Solution {

public static void main(String[] args) {
Duck duck1 = new Duck();
Duck duck2 = new Duck();
System.out.println(duck1);
System.out.println(duck2);
//напишите тут ваш код
}

public static class Duck {
public String toString() {
return «Duck»;
}
}

Где берется toSring()?
Почему другое имя метода не подходит?
Почему это именно так работает?
Если он где-то прописан, в библиотеке, где import?
Если он где-то прописан, почему вдруг у меня появляется возможность называть им свой метод?

task.task18.task1828 совет по решению

Коллеги, посмотрите код, уже сам не могу вменяемо оценить, где ошибаюсь?
Решал через LinkedHashMap. Идея простая. Выделил ID из строки, и занес в мапу
(ID, полный String);
После по ключу ищу что сделать,
если удалять, то по ID,
если заменить, то клею строку из данных, потом в мапу заношу.
После все заливаю write. Но явно где то что то не так по реализации.

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

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

package com.javarush.task.task18.task1828;

/*
Прайсы 2
*/

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

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

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        reader.close();
        Map<Integer, String> map = new LinkedHashMap<>();
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "Cp1251"));
        while (in.ready()) {
            String str1 = in.readLine();
            int id1 = Integer.parseInt(str1.substring(0, 8).replaceAll("\\D", ""));
            map.put(id1, str1);
        }
        if (args[0].equals("-u")) {
            String productname = args[2];
            for (int l = 3; l < args.length - 2; l++) productname += " " + args[l];
            String str3 = String.format("%-8.8s%-30.30s%-8.8s%-4.4s%n", String.valueOf(args[1]), productname, args[args.length - 2], args[args.length - 1]);
            map.put(Integer.parseInt(args[1]), str3);
        }
        if (args[0].equals("-d")) {
            map.remove(Integer.parseInt(args[1]));
        }

        in.close();
        BufferedWriter fileWR = new BufferedWriter(new FileWriter(fileName));
        for(Map.Entry<Integer, String> entry: map.entrySet()){
            String str4 = entry.getValue();
            fileWR.write(str4);
        }
        fileWR.close();
    }

task13.task1326

package com.javarush.task.task13.task1326;

/* 
Сортировка четных чисел из файла
*/


import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(new FileInputStream("c:/gek/1.txt"));
        ArrayList<Integer> list = new ArrayList<>();
        while (scanner.hasNext()) {
            int num = scanner.nextInt();
            if (num%2==0)
                list.add(num);
        }
        scanner.close();
        Collections.sort(list);
        for (Integer arr : list) {
            System.out.println(arr);
        }
    }
}


Что не так?
В файле это:
12
11
1374
156
112
354
9484
3112
1314
6565
64654654
641321324
64

Программа выдает:
12
64
112
156
354
1314
1374
3112
9484
64654654
641321324

Несколько раз по разному переписывал код и не принимает.
  • ,

task33.task3310 Shortener

Имеется следующее условие: Нам потребуется несколько вспомогательных классов:

4.1. Создай класс Helper.

4.1.1. Добавь в него статический метод String generateRandomString(), который будет генерировать случайную строку. Воспользуйся для этого классами SecureRandom и BigInteger. Подсказка: гугли запрос «random string java«.

4.1.2. Добавь в класс статический метод printMessage(String message). Он должен выводить переданный текст в консоль. Весь дальнейший вывод в программе должен быть реализован через этот метод!

4.2. Создай класс ExceptionHandler.

4.2.1. Добавь в него статический метод log(Exception e), который будет выводить краткое описание исключения.

Требования:

1. Метод generateRandomString класса Helper должен генерировать случайную строку используя способ описанный в условии задачи.

2. Метод printMessage класса Helper должен выводить переданный текст на экран.

3. Метод log класса ExceptionHandler должен выводить на экран краткое описание исключения.

Валидатор не принимает код, выдает, что «Метод generateRandomString класса Helper должен генерировать случайную строку используя способ описанный в условии задачи.» У кого прошла задача, подскажите, что не так

package com.javarush.task.task33.task3310;
import java.math.BigInteger;
import java.security.SecureRandom;
public class Helper {
public static String generateRandomString(){
SecureRandom secureRandom = new SecureRandom();
BigInteger bigInteger = new BigInteger(100, secureRandom);
return bigInteger.toString(32);
}
public static void printMessage(String message){
System.out.println(message);
}
}
  • ,

task33.task3310 Shortener

Имеется следующее условие: Нам потребуется несколько вспомогательных классов:

4.1. Создай класс Helper.

4.1.1. Добавь в него статический метод String generateRandomString(), который будет генерировать случайную строку. Воспользуйся для этого классами SecureRandom и BigInteger. Подсказка: гугли запрос «random string java«.

4.1.2. Добавь в класс статический метод printMessage(String message). Он должен выводить переданный текст в консоль. Весь дальнейший вывод в программе должен быть реализован через этот метод!

4.2. Создай класс ExceptionHandler.

4.2.1. Добавь в него статический метод log(Exception e), который будет выводить краткое описание исключения.

Требования:

1. Метод generateRandomString класса Helper должен генерировать случайную строку используя способ описанный в условии задачи.

2. Метод printMessage класса Helper должен выводить переданный текст на экран.

3. Метод log класса ExceptionHandler должен выводить на экран краткое описание исключения.

Валидатор не принимает код, выдает, что «Метод generateRandomString класса Helper должен генерировать случайную строку используя способ описанный в условии задачи.» У кого прошла задача, подскажите, что не так

package com.javarush.task.task33.task3310;
import java.math.BigInteger;
import java.security.SecureRandom;
public class Helper {
public static String generateRandomString(){
SecureRandom secureRandom = new SecureRandom();
BigInteger bigInteger = new BigInteger(100, secureRandom);
return bigInteger.toString(32);
}
public static void printMessage(String message){
System.out.println(message);
}
}
  • ,

package com.javarush.task.task19.task1927 задача не проходит

package com.javarush.task.task19.task1927;

/* 
Контекстная реклама

В методе main подмени объект System.out написанной тобой реадер-оберткой.
Твоя реадер-обертка должна выводить на консоль контекстную рекламу после каждого второго println-а.
Вызови готовый метод printSomething(), воспользуйся testString.
Верни переменной System.out первоначальный поток.

Рекламный текст: «JavaRush — курсы Java онлайн»

1. Класс Solution должен содержать класс TestString.
2. Класс Solution должен содержать публичное статическое поле testString типа TestString, которое сразу проинициализировано.
3. Класс TestString должен содержать публичный void метод printSomething().
4. Метод printSomething() класса TestString должен выводить на экран строки: "first","second","third","fourth","fifth".
5. Метод main(String[] args) класса Solution должен создавать поток PrintStream (используй PrintStream c параметром конструктора ByteArrayOutputStream).
6. Метод main(String[] args) класса Solution должен подменять и восстанавливать поток вывода в консоль объекта System.out.
7. Метод main(String[] args) класса Solution должен вызывать метод printSomething(),объекта testString.
8. Метод main(String[] args) класса Solution должен модифицировать строки(вставлять контекстную рекламу) выведенные методом printSomething() согласно заданию, и выводить её в консоль.
*/

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

public class Solution {
    public static TestString testString = new TestString();

    public static void main(String[] args) {
        // запомним текущую переменную
        PrintStream printStream = System.out;
        //создадим динамический массив
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //обернем его в PrintStream
        PrintStream stream = new PrintStream(baos);

        System.setOut(stream);
        testString.printSomething();

        System.setOut(printStream);
        String reklama = "«JavaRush — курсы Java онлайн»";
        String sS = baos.toString();
        String[] masS = sS.split("\\r\\n");

        for(int i=0;i<masS.length;i++){
            if(i%2==0 && i>0){
                System.out.println(reklama);
            }
            System.out.println(masS[i]);
        }



    }


    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");
            
        }
    }
}


Пожалуйста объясните, что здесь не так. Удалил, перерешал — вышло ровно как и в первый раз.

task08.lesson11.task06 (task0824) - ошибка в использовании массива

Ошибка работы возникает в строчке
Human father = new Human(«Oleg», true, 30, child1, child2, child3);
Помогите разобраться, какая ошибка заложена в приведенном ниже коде

package com.javarush.task.task08.task0824;

import java.util.ArrayList;

public class Solution {
public static void main(String[] args) {
//напишите тут ваш код
Human child1 = new Human(«Alex», true, 5);
Human child2 = new Human(«Mary», false, 7);
Human child3 = new Human(«John», false, 9);
Human father = new Human(«Oleg», true, 30, child1, child2, child3);
Human mother = new Human(«Olga», false, 29, child1, child2, child3);
Human grandMotherOfFather = new Human(«Anna», false, 70, father);
Human grandFatherOfFather = new Human(«Nikola», true, 72, father);
Human grandMotherOfMother = new Human(«Alla», false, 71, mother);
Human grandFatherOfMother = new Human(«Nikita», true, 73, mother);
System.out.println(child1.toString());
System.out.println(child2.toString());
System.out.println(child3.toString());
System.out.println(father.toString());
System.out.println(mother.toString());
System.out.println(grandMotherOfFather.toString());
System.out.println(grandFatherOfFather.toString());
System.out.println(grandMotherOfMother.toString());
System.out.println(grandFatherOfMother.toString());
}

public static class Human {
//напишите тут ваш код
public String name;
public boolean sex;
public int age;
public ArrayListchildren;
public Human(String name, boolean sex, int age){
this.name = name;
this.sex = sex;
this.age = age; }
public Human(String name, boolean sex, int age, Human… children){
this.name = name;
this.sex = sex;
this.age = age;
for(Human child: children)
this.children.add(child); }

public String toString() {
String text = "";
text += «Имя: » + this.name;
text += ", пол: " + (this.sex? «мужской»: «женский»);
text += ", возраст: " + this.age;

int childCount = this.children.size();
if (childCount > 0) {
text += ", дети: " + this.children.get(0).name;

for (int i = 1; i < childCount; i++) {
Human child = this.children.get(i);
text += ", " + child.name;
}
}
return text;
}
}
}

  • ,

level22.lesson05.task01 (task2202) - работает, не проходит проверку - РЕШЕНО

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

Найти подстроку
Метод getPartOfString должен возвращать подстроку начиная с символа после 1-го пробела и до конца слова,
которое следует после 4-го пробела.

Пример:
«JavaRush — лучший сервис обучения Java.»

Результат:
«— лучший сервис обучения»

На некорректные данные бросить исключение TooShortStringException (сделать исключением).

Требования:
1. Класс TooShortStringException должен быть потомком класса RuntimeException.
2. Метод getPartOfString должен принимать строку в качестве параметра.
3. В случае, если строка, переданная в метод getPartOfString содержит менее 4 пробелов должно возникнуть исключение TooShortStringException.
4. Метод getPartOfString должен возвращать подстроку начиная с символа после 1-го пробела и до конца слова, которое следует после 4-го пробела.
Мой код:
package com.javarush.task.task22.task2202;

/* 
Найти подстроку
*/
public class Solution {
    public static void main(String[] args) {
        System.out.println(getPartOfString("JavaRush - лучший сервис обучения Java."));
        System.out.println(getPartOfString("JavaRush - лучший сервис обучения."));
        System.out.println(getPartOfString("JavaRush - лучший сервис."));

    }

    public static String getPartOfString(String string) throws TooShortStringException {
        int index = 0;
        /*for (int i = 0, j = 0; i < 4; i++) {
            index = string.indexOf(' ',j);
            if (index < 0) throw  new TooShortStringException();
            j = index + 1;
        }*/
        int count = 0, j = 0;
        while (true) {
            index = string.indexOf(' ',j);
            if (index < 0) break;
            else count++;
            if (count == 4) break;
            j = index + 1;
        }
        //if (count < 4) throw new TooShortStringException();
        int i = index + 1;
        while (!string.substring(i,i+1).matches("^(\\p{Punct}| )$")) {
            i++;
        }
        try {
            String result = string.substring(string.indexOf(' ') + 1, i);
            return result;
        } catch (Exception e) {
            throw new TooShortStringException();
        }
    }

    public static class TooShortStringException extends RuntimeException {
    }
}

level21.lesson16.big01 задание 3

Задание:
Ипподром(3)
Несмотря на то что мы объявили переменную horses, сам список еще не создан (если ты конечно не успел опередить нас).
Создай конструктор класса Hippodrome с одним параметром типа List.
Сохрани в поле horses полученный в качестве параметра список (инициализируй поле horses).
Требования:
1. В класе Hippodrome должен быть создан конструктор с одним параметром типа List.
2. Должна существовать возможность создавать объекты типа Hippodrome извне класса с помощью оператора new.
3. Поле horses должно быть корректно инициализировано в конструкторе класса Hippodrome.

Код

public class Hippodrome {
    private ArrayList<Horse> horses = new ArrayList<>();

    public ArrayList<Horse> getHorses() {
        return horses;
    }

    public Hippodrome(List<Horse> horses) {
        this.horses.addAll(horses);
    }


Всегда выдает ошибку (пробовал разными способами, Листами....):
«Поле horses должно быть корректно инициализировано в конструкторе класса Hippodrome.»
Что не так?

level21.lesson16.big01 задание 3

№3: Делал разными способами — всегда ошибка «Поле horses должно быть корректно инициализировано в конструкторе класса Hippodrome.» Что подразумевается под корректно?
private ArrayList horses = new ArrayList<>(); 
public Hippodrome(List horses) { this.horses.addAll(horses); } 

— не проходит Если делать инициализацию в методе — тоже не проходит. Пробовал через for. Разные List…
Что не так?
Задание:
Ипподром(3)
Несмотря на то что мы объявили переменную horses, сам список еще не создан (если ты конечно не успел опередить нас).
Создай конструктор класса Hippodrome с одним параметром типа List.
Сохрани в поле horses полученный в качестве параметра список (инициализируй поле horses).
Требования:
1. В классе Hippodrome должен быть создан конструктор с одним параметром типа List.
2. Должна существовать возможность создавать объекты типа Hippodrome извне класса с помощью оператора new.
3. Поле horses должно быть корректно инициализировано в конструкторе класса Hippodrome.

task1827; Помогите все перепробовал !!!!!


package com.javarush.task.task18.task1827;
/* 
Прайсы
*/
import java.io.*;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws Exception
    {
        ArrayList <String> list = new ArrayList<>();
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String name = in.readLine();
        in.close();
        BufferedReader FileReader = new BufferedReader(new FileReader(name));
        while (FileReader.ready()){
            list.add(FileReader.readLine());
        }
        FileReader.close();

        if(args[0].equals("-c"))
        {
            Integer id = FileRead(name);
            String productName = args[1].trim();
            String price = args[2].trim();
            String quantity = args[3].trim();
            FileWrite(name, list, String.valueOf(id), productName, price, quantity);
        }
    }
    private static Integer  FileRead(String name) throws IOException
    {
        BufferedReader bufFileReader = new BufferedReader(new FileReader(name));
        int nextID;
        int max = 0;


        while (bufFileReader.ready()){

            nextID = Integer.parseInt(bufFileReader.readLine().substring(0, 8).trim());
            if (nextID > max){
                max = nextID;
            }
        }

        max = max + 1;
        bufFileReader.close();
        return max;
    }
    private static void FileWrite(String name, ArrayList<String> list, String id, String productName, String price, String quantity) throws IOException
    {
        File f1 = new File (name);
        f1.delete();
        f1.createNewFile();
        list.add(String.format("%-8s%-30.30s%-8.8s%-4.4s", id, productName, price, quantity));
        RandomAccessFile file = new RandomAccessFile(name, "rw");
        file.skipBytes((int)file.length());
        for (String aList : list) {
            file.writeBytes(aList+"\n");
        }
        file.close();
    }
}