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

level18.lesson10.home05 что за чертовщина происходит??? п.с работаю на маке, так что проверить действие файлов не могу/не умею

package com.javarush.test.level18.lesson10.home05;

/* Округление чисел
Считать с консоли 2 имени файла
Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415
Округлить числа до целых и записать через пробел во второй файл
Закрыть потоки. Не использовать try-with-resources
Принцип округления:
3.49 - 3
3.50 - 4
3.51 - 4
-3.49 - -3
-3.50 - -3
-3.51 - -4
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String file1 = reader.readLine();
        String file2 = reader.readLine();
        reader.close();
        FileInputStream input = new FileInputStream(file1);
        FileWriter output = new FileWriter(file2);

        while(input.available() > 0){
            float flo = Math.round(input.read());
            output.write(flo + " ");
        }
        output.close();
        reader.close();
        input.close();

    }
}
  • ,

Спрячьте требования задач под кат!

Дорогие разработчики,

Большая просьба спрятать под кат требования к задачам, по которым идет тест решения. Ну или шрифтом черным по черному писать, чтобы только при выделении было видно.
А то реальный спойлер.

Думаю, что многие меня поддержат.
  • ,

task19.task1920 Выход за пределы массива

Друзья, подскажите пожалуйста в чем может быть проблема. Компилятор ругается на выход за пределы массива при добавлении элементов в map; конкретно ArrayIndexOutOfBoundsException: 1 Я уже пробовал копировать вставлять решения других людей, у которых вроде как все работало, но у меня летит этот Exception ArrayIndexOutOfBoundException В качестве входного файла (args[0]) взял txt файл такого содержания

/*Petrov 2
Sidorov 6
Ivanov 1.35
Petrov 3.1
Ivanov 5
Elnikov 10
Elnikov 1.1
Agutin 11.1*/


Как я понимаю при таком варианте мне должно вывести в итоге Agutin 11.1 Elnikov 11.1

package com.javarush.task.task19.task1920;
/*
В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя значение
где [имя] — String, [значение] — double. [имя] и [значение] разделены пробелом.
Для каждого имени посчитать сумму всех его значений.
Вывести в консоль имена в алфавитном порядке, у которых максимальная сумма.
Имена разделять пробелом либо выводить с новой строки.
Закрыть потоки.
*/
    public class Solution {
        public static void main(String[] args) throws IOException {    
            BufferedReader reader = new BufferedReader(new FileReader(args[0]));
            Map<String, Double> map = new TreeMap<>();
            while (reader.ready()) {
                String[] s = reader.readLine().split(" ");
                if (map.containsKey(s[0])) {
                    map.put(s[0], map.get(s[0]) + Double.parseDouble(s[1]));
                } else {
                    map.put(s[0], Double.parseDouble(s[1]));
                }
            }
            reader.close();
            Double max = 0.0;
            for (Double d : map.values()) {
                if (d > max) max = d;
            }
            for (Double d : map.values()) {
                if (d == max) System.out.println(map.get(d));
            }
        }
    }

task30.task3010 не проходит тестирование, прошу помочь

Добрый день. прошу помощи в решении задания task30.task3010.

Минимальное допустимое основание системы счисления
В метод main первым аргументом приходит строка, которая содержит последовательность символов (Все символы в строке имеют коды в таблице ASCII от 32 до 127 включительно). Длина строки не превышает 255 символов. Нужно реализовать программу, которая по входящей строке определит, является ли содержимое строки записью числа в системе счисления с основанием не больше 36 включительно. Если является — нужно вывести минимальное основание системы счисления, в которой это число может существовать. Если не является — необходимо вывести «incorrect».
В системах счисления с основанием большим 10 в качестве цифр используются латинские буквы. К примеру, числу 35 в десятичной системе соответствует число «Z» в системе с основанием 36. Так как рассматриваем позиционные системы счисления — минимальное основание, которое должна выводить программа, это 2.
Если возникают любые исключения — перехватывай их и не выводи стек-трейс.

Пример1:
Вход:
00
Ожидаемый вывод:
2

Пример2:
Вход:
12AS08z
Ожидаемый вывод:
36

Пример3:
Вход:
12AS08Z/
Ожидаемый вывод:
incorrect

Требования:
1. Если возникло любое исключение — необходимо перехватить его и не выводить стек-трейс.
2. Если входящая строка содержит что-либо, кроме латинских букв и цифр — необходимо вывести «incorrect».
3. Если входящая строка корректна — необходимо вывести основание системы счисления.
4. Минимальное основание, которое выводит программа должно равняться 2.
5. Вывод программы должен соответствовать условию.

При проверке на сервере проходит всё кроме



public class Solution {
    public static void main(String[] args) {
        try {
            String num = args[0];

            if (!num.matches("\\w+")){
                System.out.println("incorrect");
                return;
            }

            for(int i = 2;i < 37;i++){
                try {
                    Long.parseLong(num, i);
                    System.out.println(i);
                    break;
                } catch (NumberFormatException e) {
                    /*NOP*/
                }
            }
        } catch (Exception e) {
            /*NOP*/
        }
    }
}
  • ,

com.javarush.task.task18.task1813

Подскажите где я не прав в ходе рассуждения.

Задание
AmigoOutputStream
1 Измени класс AmigoOutputStream так, чтобы он стал Wrapper-ом для класса FileOutputStream. Используй наследование.
2 При вызове метода close() должны выполняться следующая последовательность действий:
2.1 Вызвать метод flush().
2.2 Дописать следующий текст «JavaRush © All rights reserved.«, используй метод getBytes().
2.3 Закрыть поток методом close().

Требования:
1. Метод main изменять нельзя.
2. Класс AmigoOutputStream должен наследоваться от класса FileOutputStream.
3. Класс AmigoOutputStream должен принимать в конструкторе обьект типа FileOutputStream.
4. Все методы write(), flush(), close() в классе AmigoOutputStream должны делегировать свое выполнение объекту FileOutputStream.
5. Метод close() должен сначала вызвать метод flush(), затем дописать текст, затем закрыть поток.

Рыба:
public class AmigoOutputStream {
    public static String fileName = "C:/tmp/result.txt";

    public static void main(String[] args) throws FileNotFoundException {
        new AmigoOutputStream(new FileOutputStream(fileName));
    }

}


1. Хотят наследование — ну окей, добавляем
public class AmigoOutputStream extends FileOutputStream

2. Но в конструкторе хотят увидеть:

    private FileOutputStream fileOutputStream;
    public AmigoOutputStream(FileOutputStream fileOutputStream) throws FileNotFoundException {
        super(fileName);
        this.fileOutputStream = fileOutputStream;
    }


Но в main у нас:
new AmigoOutputStream(new FileOutputStream(fileName));


Т.е. в консруктор я принимаю FileOutputStream(fileName), но мне приходится еще дергать super(fileName);

Зачем fileName использовать два раза?

Ну и я не понимаю — мы создаем объект AmigoOutputStream как потомом FileOutputStream, но работает внутри AmigoOutputStream с другим FileOutputStream (который private FileOutputStream fileOutputStream)