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

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

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

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 чисел. Найти в ней все квадратные подматрицы, а потом сравнить суммы(чисел внутри квадратов по вертикали, диагонали и горизантали) этих квадратов.


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

Задача для стажеров в IT-компанию

Всем привет!
Недавно отправлял CV в одну IT компанию на должность стажера-практиканта по направлению Java.
Мне предложили решить такую задачу: «Вывести вводимый текст в колонки, формат как в газетах, одна часть в левой колонке, а в правой – вторая, и все это надо вывести в консоль»
Как бы Вы решили это задание? :)

task19.task1919

При решении задачи, столкнулся с проблемой, которую раньше не замечал.
По условию задачи необходимо считать из файла строки содержащие пару данных: Фамилия - число
При совпадении фамилий просуммировать числа.
Пример ввода:
Иванов 10.1
Иванов 20.2
Иванов 30.3
Петров 10.1
Петров 20.2
Петров 30.3
 Полученный результат решения меня удивил и озадачил
Иванов 50.5
Петров 60.6
Иванов 10.1

 public class Solution {
    public static void main(String[] args) throws IOException {
        HashMap<String, Double> person = new HashMap<>();
        String[] name = new String[2];

        BufferedReader fileReader = new BufferedReader(new InputStreamReader( new FileInputStream(args[0])));
        while (fileReader.ready()) {

            name = fileReader.readLine().split(" ");

                if (person.containsKey(name[0]))
                 {
                   person.put( name[0], person.get(name[0])+ Double.parseDouble(name[1]));
                 }
                 else
                {
                 person.put(name[0],Double.parseDouble(name[1]));
                }
        }
        for (Map.Entry hemen : person.entrySet() )
        {
            System.out.println(hemen.getKey()+ " "+ hemen.getValue());
        }
    }
}

// как видно из примера самый первый входной элемент по ключу получает двойника.
// Если учесть, что в поле КEY не может быть одинаковых обьектов, то могу предположить,
что два одинаковых имени имеют разные типы, другого объяснения я не вижу.
 Помогите понять суть происходящего и пути решения проблемы.