Считаем кол-во слов 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();
        }

    }
}
  • ,

package com.javarush.task.task16.task1627;

Здравствуйте! Решаю задачку на 16-ом уровне. Валидтаор не принимает:
package com.javarush.task.task16.task1627;

import java.util.ArrayList;
import java.util.List;

public class Solution {
    public static void main(String[] args) throws InterruptedException {
        OnlineGame onlineGame = new OnlineGame();
        onlineGame.start();
    }

    public static class OnlineGame extends Thread {
        public static volatile boolean isWinnerFound = false;

        public static List<String> steps = new ArrayList<String>();

        static {
            steps.add("Начало игры");
            steps.add("Сбор ресурсов");
            steps.add("Рост экономики");
            steps.add("Убийство врагов");
        }

        protected Gamer gamer1 = new Gamer("Ivanov", 3);
        protected Gamer gamer2 = new Gamer("Petrov", 1);
        protected Gamer gamer3 = new Gamer("Sidorov", 5);

        public void run() {
            gamer1.start();
            gamer2.start();
            gamer3.start();

            while (!isWinnerFound) {
            }
            gamer1.interrupt();
            gamer2.interrupt();
            gamer3.interrupt();
        }
    }

    public static class Gamer extends Thread {
        private int rating;

        public Gamer(String name, int rating) {
            super(name);
            this.rating = rating;
        }

        @Override
        public void run() {
            //Add your code here - добавь код тут
            try
            {
                while (!OnlineGame.isWinnerFound)
                {
                    int i;
                    for (i = 0; i < OnlineGame.steps.size(); i++)
                    {
                        System.out.println(getName() + ":" + OnlineGame.steps.get(i));
                        Thread.sleep(1000/rating);
                    }
                    if (i == OnlineGame.steps.size())
                    {
                        System.out.println(getName() + ":победитель!");
                        OnlineGame.isWinnerFound = true;
                    }
                }
            }

            catch (Exception e)
            {
                System.out.println(getName() + ":проиграл");
            }
        }
    }
}

  • ,

level30.lesson04.home01

Подскажите пожалуйста, что не так
package com.javarush.test.level30.lesson04.home01;

import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

/* Экономим время
1. Создайте Producer и Consumer (См. комментарий к методу main)
2. Создайте методы toString, equals и hashCode в классе ShareItem. Для этого в теле класса ShareItem выполни:
2.1. Alt+Enter -> toString() -> Enter
2.2. Alt+Enter -> equals() and hashCode() -> click all 'Next'-s
3. В Producer и Consumer реализуйте метод run так, чтобы вызов метода interrupt прерывал работу consumer и producer трэдов

4. Реализация метода run для Producer:
4.1. Используя метод offer добавить в очередь 9 ShareItem-ов с такими параметрами: ("ShareItem-N", N), где N - номер элемента от 1 до 9
4.2. Перед каждым добавлением вывести фразу "Элемент 'ShareItem-N' добавлен". Используйте System.out.format
4.3. Усыпить трэд на 0.1 секунды
4.4. Если у очереди есть Consumer, не занятый работой, то вывести фразу "Consumer в ожидании!".
Просмотрите методы интерфейса TransferQueue, там есть нужный метод.

5. Реализация метода run для Consumer:
5.1. Усыпить трэд на 0.5 секунды
5.2. В бесконечном цикле заберите элемент из очереди методом take и выведите в консоль "Processing item.toString()".

6. Сверьте вывод с файлом output.txt
7. Стек-трейс не выводите в консоль
*/
public class Solution {
    /*
    1. Создайте класс Producer. Для этого на красном имени класса нажмите Alt+Enter -> Create Class ...
    2. Станьте на имени аргумента в конструкторе (queue) и нажмите Alt+Enter -> Create Field for Parameter 'queue' -> Enter -> Enter
    3. Станьте на подчеркнутой строке - описании класса. Далее Alt+Enter -> Implement Methods -> Enter
    4. Проделайте п.1-3 для класса Consumer
     */

    public static void main(String[] args) throws InterruptedException {
        TransferQueue<ShareItem> queue = new LinkedTransferQueue<>();

        Thread producer = new Thread(new Producer(queue));
        Thread consumer = new Thread(new Consumer(queue));
        producer.start();
        consumer.start();

        Thread.sleep(1500);

        producer.interrupt();
        consumer.interrupt();
    }

}


package com.javarush.test.level30.lesson04.home01;

import java.util.concurrent.TransferQueue;

/**
 * 4. Реализация метода run для Producer:
 4.1. Используя метод offer добавить в очередь 9 ShareItem-ов с такими параметрами: ("ShareItem-N", N), где N - номер элемента от 1 до 9
 4.2. Перед каждым добавлением вывести фразу "Элемент 'ShareItem-N' добавлен". Используйте System.out.format
 4.3. Усыпить трэд на 0.1 секунды
 4.4. Если у очереди есть Consumer, не занятый работой, то вывести фразу "Consumer в ожидании!".
 Просмотрите методы интерфейса TransferQueue, там есть нужный метод.
 */
public class Producer implements Runnable {
    private TransferQueue<ShareItem> queue;

    public Producer(TransferQueue<ShareItem> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while(!Thread.currentThread().isInterrupted()){
            try {
                for(int i = 1; i < 10; i++) {
                    ShareItem item = new ShareItem("SahredItem-" + i, i);
                    System.out.format("Элемент '%s' добавлен%n", item.description);
                    queue.offer(item);
                }
                Thread.currentThread().sleep(100);
                if(queue.hasWaitingConsumer()){
                    System.out.println("Consumer в ожидании!");
                }
            } catch (InterruptedException e) {

            }
        }
    }
}


package com.javarush.test.level30.lesson04.home01;

import java.util.concurrent.TransferQueue;

/**
 * 5. Реализация метода run для Consumer:
 5.1. Усыпить трэд на 0.5 секунды
 5.2. В бесконечном цикле заберите элемент из очереди методом take и выведите в консоль "Processing item.toString()".
 */
public class Consumer implements Runnable {
    private TransferQueue<ShareItem> queue;

    public Consumer(TransferQueue<ShareItem> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while(!Thread.currentThread().isInterrupted()){
            try {
                Thread.currentThread().sleep(500);
                while (true) {
                    ShareItem item = queue.take();
                    System.out.println("Processing " + item.toString());
                }
            } catch (InterruptedException e) {

            }
        }
    }
}


package com.javarush.test.level30.lesson04.home01;

//this class shows how to call other constructors using 'this'
public class ShareItem {
    public String description;
    public int itemId;

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

        ShareItem item = (ShareItem) o;

        if (itemId != item.itemId) return false;
        return description != null ? description.equals(item.description) : item.description == null;
    }

    @Override
    public int hashCode() {
        int result = description != null ? description.hashCode() : 0;
        result = 31 * result + itemId;
        return result;
    }

    @Override
    public String toString() {
        return "ShareItem{" +
                "description='" + description + '\'' +
                ", itemId=" + itemId +
                '}';
    }

    public ShareItem() {
        this("Test Item", 0);
    }

    public ShareItem(String description) {
        this(description, 0);
    }

    public ShareItem(int itemId) {
        this("Test Item", itemId);
    }

    public ShareItem(String description, int itemId) {
        this.description = description;
        this.itemId = itemId;
    }

    public String getDescription() {
        return description;
    }

    public int getItemId() {
        return itemId;
    }
}
  • ,

level30.lesson04.home01

Подскажите пожалуйста, что не так
package com.javarush.test.level30.lesson04.home01;

import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

/* Экономим время
1. Создайте Producer и Consumer (См. комментарий к методу main)
2. Создайте методы toString, equals и hashCode в классе ShareItem. Для этого в теле класса ShareItem выполни:
2.1. Alt+Enter -> toString() -> Enter
2.2. Alt+Enter -> equals() and hashCode() -> click all 'Next'-s
3. В Producer и Consumer реализуйте метод run так, чтобы вызов метода interrupt прерывал работу consumer и producer трэдов

4. Реализация метода run для Producer:
4.1. Используя метод offer добавить в очередь 9 ShareItem-ов с такими параметрами: ("ShareItem-N", N), где N - номер элемента от 1 до 9
4.2. Перед каждым добавлением вывести фразу "Элемент 'ShareItem-N' добавлен". Используйте System.out.format
4.3. Усыпить трэд на 0.1 секунды
4.4. Если у очереди есть Consumer, не занятый работой, то вывести фразу "Consumer в ожидании!".
Просмотрите методы интерфейса TransferQueue, там есть нужный метод.

5. Реализация метода run для Consumer:
5.1. Усыпить трэд на 0.5 секунды
5.2. В бесконечном цикле заберите элемент из очереди методом take и выведите в консоль "Processing item.toString()".

6. Сверьте вывод с файлом output.txt
7. Стек-трейс не выводите в консоль
*/
public class Solution {
    /*
    1. Создайте класс Producer. Для этого на красном имени класса нажмите Alt+Enter -> Create Class ...
    2. Станьте на имени аргумента в конструкторе (queue) и нажмите Alt+Enter -> Create Field for Parameter 'queue' -> Enter -> Enter
    3. Станьте на подчеркнутой строке - описании класса. Далее Alt+Enter -> Implement Methods -> Enter
    4. Проделайте п.1-3 для класса Consumer
     */

    public static void main(String[] args) throws InterruptedException {
        TransferQueue<ShareItem> queue = new LinkedTransferQueue<>();

        Thread producer = new Thread(new Producer(queue));
        Thread consumer = new Thread(new Consumer(queue));
        producer.start();
        consumer.start();

        Thread.sleep(1500);

        producer.interrupt();
        consumer.interrupt();
    }

}


package com.javarush.test.level30.lesson04.home01;

import java.util.concurrent.TransferQueue;

/**
 * 4. Реализация метода run для Producer:
 4.1. Используя метод offer добавить в очередь 9 ShareItem-ов с такими параметрами: ("ShareItem-N", N), где N - номер элемента от 1 до 9
 4.2. Перед каждым добавлением вывести фразу "Элемент 'ShareItem-N' добавлен". Используйте System.out.format
 4.3. Усыпить трэд на 0.1 секунды
 4.4. Если у очереди есть Consumer, не занятый работой, то вывести фразу "Consumer в ожидании!".
 Просмотрите методы интерфейса TransferQueue, там есть нужный метод.
 */
public class Producer implements Runnable {
    private TransferQueue<ShareItem> queue;

    public Producer(TransferQueue<ShareItem> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while(!Thread.currentThread().isInterrupted()){
            try {
                for(int i = 1; i < 10; i++) {
                    ShareItem item = new ShareItem("SahredItem-" + i, i);
                    System.out.format("Элемент '%s' добавлен%n", item.description);
                    queue.offer(item);
                }
                Thread.currentThread().sleep(100);
                if(queue.hasWaitingConsumer()){
                    System.out.println("Consumer в ожидании!");
                }
            } catch (InterruptedException e) {

            }
        }
    }
}


package com.javarush.test.level30.lesson04.home01;

import java.util.concurrent.TransferQueue;

/**
 * 5. Реализация метода run для Consumer:
 5.1. Усыпить трэд на 0.5 секунды
 5.2. В бесконечном цикле заберите элемент из очереди методом take и выведите в консоль "Processing item.toString()".
 */
public class Consumer implements Runnable {
    private TransferQueue<ShareItem> queue;

    public Consumer(TransferQueue<ShareItem> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while(!Thread.currentThread().isInterrupted()){
            try {
                Thread.currentThread().sleep(500);
                while (true) {
                    ShareItem item = queue.take();
                    System.out.println("Processing " + item.toString());
                }
            } catch (InterruptedException e) {

            }
        }
    }
}


package com.javarush.test.level30.lesson04.home01;

//this class shows how to call other constructors using 'this'
public class ShareItem {
    public String description;
    public int itemId;

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

        ShareItem item = (ShareItem) o;

        if (itemId != item.itemId) return false;
        return description != null ? description.equals(item.description) : item.description == null;
    }

    @Override
    public int hashCode() {
        int result = description != null ? description.hashCode() : 0;
        result = 31 * result + itemId;
        return result;
    }

    @Override
    public String toString() {
        return "ShareItem{" +
                "description='" + description + '\'' +
                ", itemId=" + itemId +
                '}';
    }

    public ShareItem() {
        this("Test Item", 0);
    }

    public ShareItem(String description) {
        this(description, 0);
    }

    public ShareItem(int itemId) {
        this("Test Item", itemId);
    }

    public ShareItem(String description, int itemId) {
        this.description = description;
        this.itemId = itemId;
    }

    public String getDescription() {
        return description;
    }

    public int getItemId() {
        return itemId;
    }
}
  • ,

Не проходит тестирование level10.lesson11.home09

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

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


/* Одинаковые слова в списке
Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке.
Результат нужно представить в виде словаря Map<String, Integer>, где первый параметр – уникальная строка,
а второй – число, сколько раз данная строка встречалась в списке.
Вывести содержимое словаря на экран.
В тестах регистр (большая/маленькая буква) влияет на результат.
*/

public static Map<String, Integer> countWords(ArrayList<String> list)
    {
        HashMap<String, Integer> result = new HashMap<String, Integer>();

        //напишите тут ваш код
        for(String s : list)
        {
            int count = 0;
            if(!result.containsKey(s))
            {
                for (String s1 : list)
                {
                    if(s.equals(s1))
                    {
                        count++;
                    }
                }
            }
            if (count > 1)
            {
                result.put(s, count);
            }
        }
        return result;
    }
  • ,

level10.lesson11.home09

Здравствуйте. У меня на ПК код компилируется и работает. А сервер говорит " Программа не компилируется".

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

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/* Одинаковые слова в списке
Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке.
Результат нужно представить в виде словаря Map<String, Integer>, где первый параметр – уникальная строка,
а второй – число, сколько раз данная строка встречалась в списке.
Вывести содержимое словаря на экран.
В тестах регистр (большая/маленькая буква) влияет на результат.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        ArrayList<String> words = new ArrayList<String>();
        for (int i = 0; i < 20; i++)
        {
            words.add(reader.readLine());
        }

        Map<String, Integer> map = countWords(words);

        for (Map.Entry<String, Integer> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " " + pair.getValue());
        }
    }

    public static Map<String, Integer> countWords(ArrayList<String> list)
    {
		String tempKey = "";
        HashMap<String, Integer> result = new HashMap<String, Integer>();

        for (int i = 0; i < list.size(); i++) {
		tempKey = list.get(i);	
		if (!result.containsKey(tempKey)) result.put(tempKey,1);
		else result.replace(tempKey, result.get(tempKey)+1); 
			} 		
        return result;
		 
    }

}


Обнаружил, что метод replace класса HashMap появился в Java 8 SE (на ПК стоит такая). На сервере видимо Java SE 7.

Переписал последний метод без replace, результат аналогичный, на ПК компилируется, работает, а на сервер javarush не компилирует, в чем ошибка?
public static Map<String, Integer> countWords(ArrayList<String> list)
    {
		String tempKey = "";
		int tempValue;
        HashMap<String, Integer> result = new HashMap<String, Integer>();

        for (int i = 0; i < list.size(); i++) {
		tempKey = list.get(i);	
		if (!result.containsKey(tempKey)) result.put(tempKey,1);
		else {
			tempValue = result.get(tempKey)+1;
			result.remove(tempKey);
			result.put(tempKey, tempValue);
			} 
		}
        return result;
		 
		
	}
}
  • ,

com.javarush.test.level10.lesson11.home09

Программа работает, но не может пройти тест. Не могу понять что не так.
package com.javarush.test.level10.lesson11.home09;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/* Одинаковые слова в списке
Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке.
Результат нужно представить в виде словаря Map<String, Integer>, где первый параметр – уникальная строка,
а второй – число, сколько раз данная строка встречалась в списке.
Вывести содержимое словаря на экран.
В тестах регистр (большая/маленькая буква) влияет на результат.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        ArrayList<String> words = new ArrayList<String>();
        for (int i = 0; i < 20; i++)
        {
            words.add(reader.readLine());
        }

        Map<String, Integer> map = countWords(words);

        for (Map.Entry<String, Integer> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " " + pair.getValue());
        }
    }

    public static Map<String, Integer> countWords(ArrayList<String> list)
    {
        HashMap<String, Integer> result = new HashMap<String, Integer>();
        ArrayList<String> lists = new ArrayList<String>();

           for(int i = 0; i < list.size();i++)
        {
            String s = list.get(i).toLowerCase();
            lists.add(s);
        }
            for(int g = 0; g < lists.size(); g++)
            {
                int count = 0;
                for (int i = 0; i < lists.size(); i++)
                {
                    if (lists.get(i).equals(lists.get(g))) count++;
                }
                result.put(lists.get(g),count);

            }

        //напишите тут ваш код


        return result;
    }

}
  • ,

level06.lesson11.bonus02 помогите не проходит

package com.javarush.test.level06.lesson11.bonus02;
/* Нужно добавить в программу новую функциональность
Задача: У каждой кошки есть имя и кошка-мама. Создать класс, который бы описывал данную ситуацию. Создать два объекта: кошку-дочь и кошку-маму. Вывести их на экран.
Новая задача: У каждой кошки есть имя, кошка-папа и кошка-мама. Изменить класс Cat так, чтобы он мог описать данную ситуацию.
Создать 6 объектов: дедушку(папин папа), бабушку(мамина мама), папу, маму, сына, дочь.
Вывести их всех на экран в порядке: дедушка, бабушка, папа, мама, сын, дочь.

Пример ввода:
дедушка Вася
бабушка Мурка
папа Котофей
мама Василиса
сын Мурчик
дочь Пушинка

Пример вывода:
Cat name is дедушка Вася, no mother, no father
Cat name is бабушка Мурка, no mother, no father
Cat name is папа Котофей, no mother, father is дедушка Вася
Cat name is мама Василиса, mother is бабушка Мурка, no father
Cat name is сын Мурчик, mother is мама Василиса, father is папа Котофей
Cat name is дочь Пушинка, mother is мама Василиса, father is папа Котофей
*/

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

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        Cat catGrandfather = new Cat(reader.readLine());
        Cat catGrandmother = new Cat(reader.readLine());
        Cat catFather = new Cat(reader.readLine(),null, catGrandfather);
        Cat catMother = new Cat(reader.readLine(),catGrandmother,null);
        Cat catSon = new Cat(reader.readLine(),catMother,catFather);
        Cat catDaudhter = new Cat(reader.readLine(),catMother,catFather);

        System.out.println(catGrandfather);
        System.out.println(catGrandmother);
        System.out.println(catFather);
        System.out.println(catMother);
        System.out.println(catSon);
        System.out.println(catDaudhter);
    }

    public static class Cat
    {
        private String name;
        private Cat mother;
        private Cat father;

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

        Cat(String name, Cat mother)
        {
            this.name = name;
            this.mother = mother;
        }

        Cat(String name, Cat mother, Cat father)
        {
            this.name = name;
            this.mother = mother;
            this.father = father;
        }

        @Override
        public String toString()
        {
            if (mother == null && father == null)
                return "Cat name is " + name + ", no mother" + ", no father";
            else
                if (mother != null && father == null)
                return "Cat name is " + name + ", mother is " + mother.name + ", no father";
                else
                    if (mother == null)
                    return "Cat name is " + name + ", no mother" + ", father is " + father.name;
                    else
                        return "Cat name is " + name + ", mother is " + mother.name + ", father is " + father.name;
        }
    }

}

level20.lesson02.task03

package com.javarush.test.level20.lesson02.task03;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/* Знакомство с properties
В методе fillInPropertiesMap считайте имя файла с консоли и заполните карту properties данными из файла.
Про .properties почитать тут - http://ru.wikipedia.org/wiki/.properties
Реализуйте логику записи в файл и чтения из файла для карты properties.
*/
public class Solution {
    public static Map<String, String> properties = new HashMap<>();

    public static void main(String[] args) throws Exception {
        Solution solution = new Solution();
        solution.fillInPropertiesMap();
    }

    public void fillInPropertiesMap() throws Exception {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String name;
        while (((name = reader.readLine()) == null) || !(name.contains(".properties"))) System.out.println("enter file name with .properties extension");
        FileInputStream inputStream = new FileInputStream(name);
        load(inputStream);
        OutputStream outputStream = new FileOutputStream(name);
        save(outputStream);
        inputStream.close();
        outputStream.close();
        reader.close();
    }

    public void save(OutputStream outputStream) throws Exception {
        Properties props = new Properties();
        for (Map.Entry<String, String> entry : properties.entrySet()) props.setProperty(entry.getKey(), entry.getValue());    //наполняем массив Properties парами ключ-значение
        props.store(outputStream, null);    //выгружаем пары массива Properties в файл .properties
    }

    public void load(InputStream inputStream) throws Exception {
        Properties props = new Properties();
        props.load(inputStream);    //выгружаем Properties из файла .properties в массив
        for (Map.Entry<Object, Object> entry : props.entrySet()) properties.put(entry.getKey().toString(), entry.getValue().toString());    //заполняем статический массив из массива Properties
    }
}


Всё работает, но валидатор не принимает.
  • ,

level26.lesson15.big01 lvl10

import java.util.*;
import com.javarush.test.level26.lesson15.big01.exception.NotEnoughMoneyException;

public class CurrencyManipulator
{
    private String currencyCode;
    private Map<Integer, Integer> denominations = new HashMap<>();

    public String getCurrencyCode()
    {
        return currencyCode;
    }

    public CurrencyManipulator(String currencyCode)
    {
        this.currencyCode = currencyCode;
    }
    public void addAmount(int denomination, int count){
        int result = count;
        if(denominations.containsKey(denomination))
            result+=denominations.get(denomination);
     denominations.put(denomination,result);
    }
    public int getTotalAmount(){
        int sum = 0;
        for(Integer i : denominations.keySet())
            sum+=i*denominations.get(i);
        return sum;
    }
    public  boolean hasMoney(){
        return !denominations.isEmpty();
    }
    public boolean isAmountAvailable(int expectedAmount){
        return expectedAmount > 0  && expectedAmount < getTotalAmount();
    }
    public Map<Integer, Integer> withdrawAmount(int expectedAmount) throws NotEnoughMoneyException{
        // в allVariants добавляются все найденые варианты, компаратор сделает первым нужный вариант
        TreeSet<Map<Integer,Integer>> allVariants = new TreeSet<>(ComparatorFactory.lowCountBillFirst());
        // аналог denominations, отсортированый 
        Map<Integer,Integer> forReduceBillCount = new TreeMap<>(ComparatorFactory.bigBillFirst());
        forReduceBillCount.putAll(denominations);

        do{
        // методом reduceBill снижается количество купюр на 1  в поисках нового варианта комбинации
            int currentSum = expectedAmount;
            Map<Integer, Integer> currentMap = new LinkedHashMap<>();

            for(Integer key : forReduceBillCount.keySet()){
                int value = forReduceBillCount.get(key);
                if (key > currentSum || value <= 0) continue;
                int divider = currentSum / key;
                if (divider <= value)
                {
                    currentSum = currentSum - divider * key;
                    currentMap.put(key, divider);
                } else
                {
                    currentSum = currentSum - value * key;
                    currentMap.put(key, value);
                }
                if (currentSum == 0)
                {
                    allVariants.add(currentMap);
                    break;
                }
            }
        }while (reduceBills(forReduceBillCount));
        if(allVariants.isEmpty()) throw new NotEnoughMoneyException();
        Map<Integer,Integer> finalMap = allVariants.first();

        for(Integer i : denominations.keySet()){
            if(finalMap.get(i) != null)
               denominations.put(i,denominations.get(i) - finalMap.get(i));
        }


        return denominations;
    }
    public static boolean reduceBills(Map<Integer,Integer> map){
        for(Integer i : map.keySet())
            if(map.get(i) > 0) {
                map.put(i,map.get(i) - 1);
                return true;
            }
        return false;
    }

    public static void main(String[] args) throws Exception{
        CurrencyManipulator cm = new CurrencyManipulator("LOL");
        cm.denominations.put(1000, 2);
        cm.denominations.put(600, 3);
        //cm.denominations.put(100,5);
        cm.denominations.put(50, 12);
        //cm.withdrawAmount(350);
        TreeMap<Integer,Integer> map = new TreeMap<>(ComparatorFactory.bigBillFirst());
                map.putAll(cm.withdrawAmount(1200));
        System.out.println(map);

    }

}



import com.javarush.test.level26.lesson15.big01.ComparatorFactory;
import com.javarush.test.level26.lesson15.big01.ConsoleHelper;
import com.javarush.test.level26.lesson15.big01.CurrencyManipulator;
import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory;
import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException;
import com.javarush.test.level26.lesson15.big01.exception.NotEnoughMoneyException;

import java.util.Map;
import java.util.TreeMap;

/**
 * Created by PC-User on 05.01.2017.
 */
class WithdrawCommand implements Command
{
    @Override
    public void execute()  throws InterruptOperationException
    {
        String currencyCode = ConsoleHelper.askCurrencyCode();
        CurrencyManipulator cm = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(currencyCode);
        int amount;
        TreeMap<Integer,Integer> map = new TreeMap<>(ComparatorFactory.bigBillFirst());
        while(true){
            try
            {
                ConsoleHelper.writeMessage("enter the sum you need");
                amount = Integer.parseInt(ConsoleHelper.readString());
                if (amount <= 0) throw new NumberFormatException();
                if( cm.isAmountAvailable(amount)){
                    map.putAll(cm.withdrawAmount(amount));
                    for(Integer i : map.keySet())
                        ConsoleHelper.writeMessage(String.format("\t%d - %d", i, map.get(i)));
                    ConsoleHelper.writeMessage("transaction success complete");
                    break;
                }
                ConsoleHelper.writeMessage("wrong data");
            }
            catch (NumberFormatException e1){
                ConsoleHelper.writeMessage("wrong data");
            }
            catch (NotEnoughMoneyException e)
            {
                ConsoleHelper.writeMessage("not enough money");
            }
        }
    }
}


import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 * Created by PC-User on 06.01.2017.
 */
public class ComparatorFactory
{
    public static Comparator<? super Map<Integer,Integer>> lowCountBillFirst(){
        TreeSet<Map<Integer,Integer>> allVariants = new TreeSet<>(new Comparator<Map<Integer, Integer>>()
        {
            @Override
            public int compare(Map<Integer, Integer> o1, Map<Integer, Integer> o2)
            {
                int sum1 = 0;
                for(Integer i : o1.keySet())
                    sum1+=o1.get(i);
                int sum2 = 0;
                for(Integer i : o2.keySet())
                    sum2+=o2.get(i);
                if(sum1 != sum2)
                    return sum1 - sum2 ;
                int max1 = 0;
                for(Integer i : o1.keySet())
                    if( max1 < i) max1 = i;
                int max2 = 0;
                for(Integer i : o2.keySet())
                    if( max2 < i) max2 = i;
                if( max1 != max2)
                    return  max2 - max1;

                return o2.get(max2) - o1.get(max1);
            }
        });
        return allVariants.comparator();
    }
    public static Comparator<? super Integer> bigBillFirst(){
        TreeMap<Integer,Integer> forReduceBillCount = new TreeMap<>(new Comparator<Integer>()
        {
            @Override
            public int compare(Integer o1, Integer o2)
            {
                return o2 - o1;
            }
        });
        return forReduceBillCount.comparator();
    }
}

level20.lesson02.task03 — всё работает, но не принимает валидатор

package com.javarush.test.level20.lesson02.task03;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/* Знакомство с properties
В методе fillInPropertiesMap считайте имя файла с консоли и заполните карту properties данными из файла.
Про .properties почитать тут - http://ru.wikipedia.org/wiki/.properties
Реализуйте логику записи в файл и чтения из файла для карты properties.
*/
public class Solution {
    public static Map<String, String> properties = new HashMap<>();

    public void fillInPropertiesMap() throws Exception {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String name;
        while (((name = reader.readLine()) == null) || !(name.contains(".properties"))) System.out.println("enter file name with .properties extension");
        FileInputStream inputStream = new FileInputStream(name);
        load(inputStream);
        OutputStream outputStream = new FileOutputStream(name);
        save(outputStream);
        inputStream.close();
        outputStream.close();
        reader.close();
    }

    public void save(OutputStream outputStream) throws Exception {
        PrintWriter writer = new PrintWriter(outputStream);
        for (Map.Entry<String, String> entry : properties.entrySet()) writer.println(entry.getKey() + "=" + entry.getValue());
        writer.close();
    }

    public void load(InputStream inputStream) throws Exception {
        Properties props = new Properties();
        props.load(inputStream);
        for (Map.Entry<Object, Object> entry : props.entrySet()) properties.put(entry.getKey().toString(), entry.getValue().toString());
    }
}


всё отрабатывает отлично, менял разделитель ключа — значения в файле на: = «пробел»