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

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

"Считаем слово" Почему не принимает?

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

com.javarush.task.task19.task1907;
«Считаем слово»
Считать с консоли имя файла.
Файл содержит слова, разделенные знаками препинания.
Вывести в консоль количество слов «world«, которые встречаются в файле.


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 {

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

        int count = 0;

        while (bufferedFileReader.ready()){

            String text = bufferedFileReader.readLine();
            text = text.toLowerCase();
            text = text.replaceAll("\\p{P}"," ");
            String[] mas = text.split(" ");

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

        reader.close();
        fileReader.close();
        bufferedFileReader.close();

        System.out.println(count);


Логика следующая:
1. считываем из файла строку
2. переводим в нижний регистр (на всякий. но и без этого не проходит)
3. заменяем всю пунктуацию на пробелы
4. по пробелам разбиваем строку текста на массив
5. подсчитываем количество совпадений
6. если есть ещё строка, повторяем пункты с 1 по 5
7. закрываем потоки и выводим количество совпадений

Тестовый файл:
«World? world ,world, world.world!world world
world»

Результат: 8

Где я ошибся?
  • ,

task0705 - выдаёт требуемый результат, но не проходит проверку


 1. package com.javarush.task.task07.task0705;
 2.
 3. import java.io.BufferedReader;
 4. import java.io.InputStreamReader;
 5. 
 6. /* 
 7. Один большой массив и два маленьких
 8. */
 9. 
10. public class Solution {
11.     public static void main(String[] args) throws Exception {
12.         int big_arr_items = 20;
13.         int small_arr_items = 10;
14.         int[] big_arr = new int[big_arr_items];
15.         BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
16.         int[] first_half = new int[small_arr_items];
17.         int[] second_half = new int[small_arr_items];
18.         for (int i = 0; i < big_arr.length; i++) {
19.             big_arr[i] = Integer.parseInt(input.readLine());
20.             if (i < first_half.length)
21.                 first_half[i] = big_arr[i];
22.             else
23.                 second_half[i - second_half.length] = big_arr[i];
24.         }
25.         for (int i = 0; i < second_half.length; i++) {
26.             System.out.println(second_half[i]);
27.         }
28.     }
29. }

level20 тема запись в файл и чтение из потока

Проходя тему записи в файл и чтение из потока 20 уровня, я понял, что материал в теме значительно
урезан. Поэтому, я решил написать небольшой код и посмотреть наглядно, как это все работает.
Создал объект у которого есть кот и собака и сохранил их в файл. Так как показано в лекции.
Параметры созданных объектов в файле сохранились в следующем виде: 

Барсик
3
1.2
Shavka
6

Но при чтении из файла возникает проблема с объектом Dog.
Имя и возраст при чтении этого объекта = null (NumberFormatException)
Если кто сталкивался с этой проблемой, или знает ее причину подскажите

public class Filereader {

    public static void main(String[] args) throws IOException {
        OutputStream fileOut = new FileOutputStream("d:/fileOut.txt");// создали поток записи в файл
        InputStream fileInput = new FileInputStream("d:/fileOut.txt");//создан поток чтения из файла

        Human pesen = new Human();
        pesen = new Human("Иванов",new Cat("Барсик",3,1.2),new Dog("Shavka",6));
        pesen.save(fileOut);
        fileOut.close();
        pesen.load(fileInput);

    }

    private static class Human {
        private   String name;
        private Cat cat;
        private   Dog dog;

        private Human(){}

        private Human(String name, Cat cat, Dog dog) {
            this.name = name;
            this.cat = cat;
            this.dog = dog;
        }

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

        public Human(String name, Dog dog) {
            this.name = name;
            this.dog = dog;
        }

        public Human(String name) {
            this.name = name;
        }
        private void save(OutputStream output)
        {
            cat.save(output);
            dog.save(output);
        }
        private void load(InputStream input) throws IOException {

            cat.load(input);

            dog.load(input);
        }
    }

    private static class Cat {
        private String name;
        private int age;
        private double weight;

       private Cat(String name, int age, double weight) {
            this.name = name;
            this.age = age;
            this.weight = weight;
        }
        private void save(OutputStream output)
        {
            PrintWriter printWriter = new PrintWriter(output);
            printWriter.println(name);
            printWriter.println(age);
            printWriter.println(weight);
            printWriter.flush();
        }
        private void load(InputStream inputStream) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            name = reader.readLine();
            age = Integer.parseInt(reader.readLine());
            weight = Double.parseDouble(reader.readLine());
        }
    }

    private static class Dog {
        private String name;
        private   int age;

        private Dog(String name,int age) {
            this.name = name;
            this.age = age;
        }
        private void save(OutputStream output)
        {
            PrintWriter printWriter = new PrintWriter(output);
            printWriter.println(name);
            printWriter.println(age);
            printWriter.flush();
        }
        private void load(InputStream inputStream) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                System.out.println(reader.readLine());// = null
               // name = reader.readLine();
                age = Integer.parseInt(reader.readLine());// = null
            }
            catch (NumberFormatException e) {

                System.out.println(name);

                System.out.println(age);
            }

        }

    }
}

task2113 - Ипподром(8), валидатор не принимает

Бред какой-то. Валидатор ругается по всем пунктам. Подозреваю какой-то нестандартный косяк. Монитор help'а, комментов и обсуждения выявил, что подобная проблема не только у меня (например, вот), однако и решения пока ни у кого нет.

Задача из разряда «больших». В данной подзадаче реализовывается только run(). Остальной код прошел предыдущие проверки.

Условие:
В методе run сделай цикл от 1 до 100. Это и будет наш забег.
В теле цикла вызываем сначала move, затем print.
Чтобы весь цикл не отработал за долю секунды — добавь в него еще Thread.sleep(200);

Требования:
1. В методе run класса Hippodrome должен быть 100 раз вызван метод move.
2. В методе run класса Hippodrome должен быть 100 раз вызван метод print.
3. В методе run класса Hippodrome должен быть 100 раз вызван метод Thread.sleep(200).
4. Метод print должен быть вызван после метода move.
  • ,

package com.javarush.task.task20.task2003;

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

/* 
Знакомство с properties
В методе fillInPropertiesMap считайте имя файла с консоли и заполни карту properties данными из файла.
Про .properties почитать тут — http://ru.wikipedia.org/wiki/.properties
Реализуй логику записи в файл и чтения из файла для карты properties.

Требования:
1. Метод fillInPropertiesMap должен считывать данные с консоли.
2. Метод fillInPropertiesMap должен создавать FileInputStream, передавая считанную строку в качестве параметра.
3. Метод fillInPropertiesMap должен вызывать метод load передавая только что созданный FileInputStream в качестве параметра.
4. Метод save должен сохранять карту properties в полученный в качестве параметра объект типа OutputStream.
5. Метод load должен восстанавливать состояние карты properties из полученного в качестве параметра объекта типа InputStream.
*/
public class Solution {
    public static Map<String, String> properties = new HashMap<>();

    public static void fillInPropertiesMap() throws Exception {
        //implement this method - реализуйте этот метод
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(bufferedReader.readLine());
        bufferedReader.close();
        load(fileInputStream);
    }

    public static void save(OutputStream outputStream) throws Exception {
        Properties props = new Properties();
        props.putAll(properties);
        props.store(outputStream, "");
    }

    public static void load(InputStream inputStream) throws Exception {
        //implement this method - реализуйте этот метод
        Properties props = new Properties();
        props.load(inputStream);
        for(String name : props.stringPropertyNames()) {
            properties.put(name, props.getProperty(name));
        }
    }

    public static void main(String[] args) throws Exception {
        fillInPropertiesMap();
    }
}
  • ,

package com.javarush.task.task20.task2003

Всем привет! Ситуация следующая: задача полностью решена (как мне кажется), все условия четко выполнены по пунктам, все отрабатывает как надо. Но! Валидатор пишет, что ни одно из условий не выполнено. Помогите, пожалуйста, разобраться с этим мракобесием.
PS хотел задать вопрос на help.javarush.ru/, но он любозно не работает :)

/* 
Знакомство с properties
В методе fillInPropertiesMap считайте имя файла с консоли и заполни карту properties данными из файла.
Про .properties почитать тут — http://ru.wikipedia.org/wiki/.properties
Реализуй логику записи в файл и чтения из файла для карты properties.

Требования:
1. Метод fillInPropertiesMap должен считывать данные с консоли.
2. Метод fillInPropertiesMap должен создавать FileInputStream, передавая считанную строку в качестве параметра.
3. Метод fillInPropertiesMap должен вызывать метод load передавая только что созданный FileInputStream в качестве параметра.
4. Метод save должен сохранять карту properties в полученный в качестве параметра объект типа OutputStream.
5. Метод load должен восстанавливать состояние карты properties из полученного в качестве параметра объекта типа InputStream.
*/
public class Solution {
    public static Map<String, String> properties = new HashMap<>();

    public static void fillInPropertiesMap() throws Exception {
        //implement this method - реализуйте этот метод
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(bufferedReader.readLine());
        bufferedReader.close();
        load(fileInputStream);
    }

    public static void save(OutputStream outputStream) throws Exception {
        Properties props = new Properties();
        props.putAll(properties);
        props.store(outputStream, "");
    }

    public static void load(InputStream inputStream) throws Exception {
        //implement this method - реализуйте этот метод
        Properties props = new Properties();
        props.load(inputStream);
        for(String name : props.stringPropertyNames()) {
            properties.put(name, props.getProperty(name));
        }
    }

    public static void main(String[] args) throws Exception {
        fillInPropertiesMap();
    }
}


Сериализация при RMI

задача 3208
Код приведен просто как пример отсутствия явного упоминания об интерфейсе Selializable
Вопрос к знатокам:
Почему во всей литературу пишут, что при работе с RMI передаваемые типы должны быть сериализуемыми, но данный интерсфейс нигде не фигурирует?

package com.javarush.task.task32.task3208;
import java.rmi.AlreadyBoundException;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
/*
RMI-2
*/
//        Реализуй логику метода run в SERVER_THREAD. В нем будет имитироваться серверная часть:
//        1) Инициализируй поле registry, которое будет принимать и обрабатывать запросы на 2099 порту.
//        2) Создай два объекта — Cat и Dog.
//        3) Используй класс UnicastRemoteObject, чтобы создать Remote объекты для созданных Cat и Dog.
//        Remote объекты будут в состоянии принимать обращения к своим методам используя выбранный порт (2099).
//        4) Для Cat и Dog добавь в registry связь уникального текстового ключа и Remote объекта. Текстовый ключ придумай сам.
//        5) При возникновении любого исключения выведи его стек-трейс в поток System.err.
//        Метод main не участвует в тестировании.
//
//        Требования:
//        1. В методе run() необходимо инициализировать поле registry. Для этого используй LocateRegistry.createRegistry (2099).
//        2. В методе run() необходимо создать два объекта - Cat и Dog.
//        3. В методе run() необходимо создать Remote объекты для созданных Cat и Dog используя UnicastRemoteObject.exportObject (Remote, int).
//        4. Для Cat и Dog нужно добавить в registry связь уникального текстового ключа и Remote объекта используя registry.bind (String, Remote).
//        5. При возникновении любого исключения нужно вывести его стек-трейс в поток System.err используя метод printStackTrace ().
public class Solution {
    public static Registry registry;
    public static final String DOG_BINDING_NAME = "server.dog";
    public static final String CAT_BINDING_NAME = "server.cat";
    //pretend we start rmi client as CLIENT_THREAD thread
    public static Thread CLIENT_THREAD = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                for (String bindingName : registry.list()) {
                    Animal service = (Animal) registry.lookup(bindingName);
                    service.printName();
                    service.say();
                }
            } catch (RemoteException e) {
                e.printStackTrace(System.err);
            } catch (NotBoundException e) {
                e.printStackTrace(System.err);
            }
        }
    });
    //pretend we start rmi server as SERVER_THREAD thread
    public static Thread SERVER_THREAD = new Thread(new Runnable() {
        @Override
        public void run() {
            //реализация решения
        }
    });
    public static void main(String[] args) throws InterruptedException {
        //start rmi server thread
        SERVER_THREAD.start();
        Thread.sleep(1000);
        //start client
        CLIENT_THREAD.start();
    }
}


Класс Cat
package com.javarush.task.task32.task3208;

import java.rmi.RemoteException;

public class Cat implements Animal {
    private String name;

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

    @Override
    public void say() throws RemoteException {
        System.out.println("meow");
    }

    @Override
    public void printName() throws RemoteException {
        System.out.print("Cat " + name + " ");
    }
}

Класс Dog аналогичен
Интерфейс Animal
package com.javarush.task.task32.task3208;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Animal extends Remote {
    void say() throws RemoteException;

    void printName() throws RemoteException;
}
  • ,

package com.javarush.task.task20.task2003

Всем привет! Ситуация следующая: задача полностью решена (как мне кажется), все условия четко выполнены по пунктам, все отрабатывает как надо. Но! Валидатор пишет, что ни одно из условий не выполнено. Помогите, пожалуйста, разобраться с этим мракобесием.
PS хотел задать вопрос на help.javarush.ru/, но он любозно не работает :)

/* 
Знакомство с properties
В методе fillInPropertiesMap считайте имя файла с консоли и заполни карту properties данными из файла.
Про .properties почитать тут — http://ru.wikipedia.org/wiki/.properties
Реализуй логику записи в файл и чтения из файла для карты properties.

Требования:
1. Метод fillInPropertiesMap должен считывать данные с консоли.
2. Метод fillInPropertiesMap должен создавать FileInputStream, передавая считанную строку в качестве параметра.
3. Метод fillInPropertiesMap должен вызывать метод load передавая только что созданный FileInputStream в качестве параметра.
4. Метод save должен сохранять карту properties в полученный в качестве параметра объект типа OutputStream.
5. Метод load должен восстанавливать состояние карты properties из полученного в качестве параметра объекта типа InputStream.
*/
public class Solution {
    public static Map<String, String> properties = new HashMap<>();

    public static void fillInPropertiesMap() throws Exception {
        //implement this method - реализуйте этот метод
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(bufferedReader.readLine());
        bufferedReader.close();
        load(fileInputStream);
    }

    public static void save(OutputStream outputStream) throws Exception {
        Properties props = new Properties();
        props.putAll(properties);
        props.store(outputStream, "");
    }

    public static void load(InputStream inputStream) throws Exception {
        //implement this method - реализуйте этот метод
        Properties props = new Properties();
        props.load(inputStream);
        for(String name : props.stringPropertyNames()) {
            properties.put(name, props.getProperty(name));
        }
    }

    public static void main(String[] args) throws Exception {
        fillInPropertiesMap();
    }
}


  • ,

квадратные подматрицы

дана прямоугольная матрица (m,n) из int чисел. Найти в ней все квадратные подматрицы, а потом сравнить суммы(чисел внутри квадратов по вертикали, диагонали и горизантали) этих квадратов.


Задача сама по себе звучала нитак (первоночально надо было реализовать ф-ю, которая найдет магические квадраты, в прямоугольнике чисел). Но как определить магический ли это квадрат я знаю, а не знаю, как именно наити обыкновенные квадраты в прямоугольнике.