com.javarush.test.level06.lesson08.task04

все та же проблема:
не проходит проверку код

package com.javarush.test.level06.lesson08.task04;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/* Класс ConsoleReader
Сделать класс ConsoleReader, у которого будут 4 статических метода:
String readString() – читает с клавиатуры строку
int readInt() – читает с клавиатуры число
double readDouble() – читает с клавиатуры дробное число
void readLn() – ждет нажатия enter [использовать readString()]
*/

public class ConsoleReader
{
    public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static String readString() throws Exception
    {
        return ConsoleReader.reader.readLine();
    }

    public static int readInt() throws Exception
    {
        return Integer.parseInt(ConsoleReader.reader.readLine());
    }

    public static double readDouble() throws Exception
    {
        return Double.parseDouble(ConsoleReader.reader.readLine());
    }

    public static void readLn() throws Exception
    {
       ConsoleReader.readString();
    }
}


можете подсказать в чем возможная беда? в идее компилится без ошибок.

29 комментариев

kluneev
По-моему в последнем должна быть проверка, что нажат энтер
Howling
  • Howling
  • 0
  • Комментарий отредактирован 2014-07-16 10:58:51 пользователем Howling
ну так ConsoleReader.readString();
отрабатывает то самое нажатие энтер, только возвращает введенную строку, которую в данном случае не используем, так как void…
kluneev
Слушай вспомнил, по-моему там ридер нужен в каждом методе.
Howling
спс… помогло.
Peras
  • Peras
  • +1
  • Комментарий отредактирован 2014-07-23 13:08:31 пользователем Peras
хоть убей не могу понять почему в каждом методе нужно объявлять: BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
неужели нельзя это сделать в самом классе перед созданием методов.
AquaMarinka
Помогите, пожалуйста. Не проходит проверку:

/* Класс ConsoleReader
Сделать класс ConsoleReader, у которого будут 4 статических метода:
String readString() – читает с клавиатуры строку
int readInt() – читает с клавиатуры число
double readDouble() – читает с клавиатуры дробное число
void readLn() – ждет нажатия enter [использовать readString()]
*/
public class ConsoleReader
{
    public static String readString() throws Exception
    {
        //Напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s  = reader.readLine();
        return s;
    }

    public static int readInt() throws Exception
    {
        //Напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(reader.readLine());
        return num;

    }

    public static double readDouble() throws Exception
    {
        //Напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        double numDouble = Double.parseDouble(reader.readLine());
        return numDouble;

    }

    public static void readLn() throws Exception
    {
        //Напишите тут ваш код
        ConsoleReader.readString();

    }
}
BappekM
void readLn() – ждет нажатия enter [использовать readString()] вот тут ошибка (нужен цикл) :)
AquaMarinka
не совсем понимаю зачем цикл. Запускается метод readString() и он считывает строку до нажатия Enter.
dimaMJ
ConsoleReader.readString();
не обязательно так писать, можно просто readString(); статический метод может обращаться к любому статическому методу)
а на счет самого метода вам нужно написать условие нажатия Enter (подсказка: при нажатии enter происходит переход на новую строку)
AquaMarinka
Я правильно понимаю, что мне нужно написать считывание строки и проверять на /n? А зачем тогда использовать метод readString()? Что-то я совсем запуталась.
dimaMJ
Да вы понимаете правильно
читайте задание
String readString() – читает с клавиатуры строку
void readLn() – ждет нажатия enter [использовать readString()]
readString() нужен для чтение строки, вы вводите строку и данный метод возвращает ее, а метод readLn(), должен проверять нажал ли пользователь enter.
AquaMarinka
Но ведь readString() вернет строку только после того как пользователь нажал Enter.
dimaMJ
просто выполните задание :D я лично сам не понял как это все должно работать) ваша задача описать метод, как я понимаю в строку должен передаться исключительно enter, тогда и сработает данный метод
AquaMarinka
Действительно странно. Попробую подождать еще. Может будут какие-то еще идеи. Хотелось бы разобраться все таки.
Спасибо за ваши комментарии )
dimaMJ
мне кажется метод немного не корректный, если метод должен срабатывать только тогда, когда в строке только enter (естественно строка у нас будет пустой) то легче будет проверить строку на пустоту, ведь в любом случае, для передачи строки нужно нажать enter
Docktor91
ждет нажатия энтер и пустая строка разные вещи, но не буду ничего утверждать)
Docktor91
хм может убрать ридеры из методов инт и дабл,
return Double.parseDouble(readString());
AquaMarinka
Поправила на

public class ConsoleReader

{
    public static String readString() throws Exception
    {
        //Напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s  = reader.readLine();
        return s;
    }

    public static int readInt() throws Exception
    {
        //Напишите тут ваш код
        return Integer.parseInt(readString());

    }

    public static double readDouble() throws Exception
    {
        //Напишите тут ваш код
        return Double.parseDouble(readString());

    }

    public static void readLn() throws Exception
    {
        //Напишите тут ваш код
        readString();

    }
}

Тест не проходит
dimaMJ
  • dimaMJ
  • 0
  • Комментарий отредактирован 2014-08-10 15:49:07 пользователем dimaMJ
я же говорил выполните проверку на вхождение \n в readLn()
Docktor91
да ненужна проверка)
тем более "\n" не войдет в считываемую строку, т.к. до него он и читает
dimaMJ
  • dimaMJ
  • 0
  • Комментарий отредактирован 2014-08-10 16:00:41 пользователем dimaMJ
ну у меня с ней все прошло :D по сути да не нужно, так как мы и так нажимаем enter
Docktor91
перезагрузи задачу, и вставь все методы
AquaMarinka
Да, все протестировалось. Скопировала последний код и задача засчиталась. Спасибо вам )
San
Пришел к этому коду самостоятельно, но никак не могу запустить эти методы в работу в main методе.
Возможно кто-нибудь сможет подсказать?
Sdu
Если имеется в виду код (очень неудобно перечитывать всю ветку чтобы понять о чем речь):
public class ConsoleReader

{
    public static String readString() throws Exception
    {
        //Напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s  = reader.readLine();
        return s;
    }

    public static int readInt() throws Exception
    {
        //Напишите тут ваш код
        return Integer.parseInt(readString());

    }

    public static double readDouble() throws Exception
    {
        //Напишите тут ваш код
        return Double.parseDouble(readString());

    }

    public static void readLn() throws Exception
    {
        //Напишите тут ваш код
        readString();

    }
}


То, в методе main нужно обращаться через имя класса.имя метода.
ConsoleReader.readDouble()


Перечитайте лекции и доп. материал о статических полях и методах.
San
Хорошо, попробую, спасибо.
vmlopach
Ну вызвали readString() в readLn() и что дальше? Наверно он хотябы вывети должен результат System.out.println(readString());
кстати к readString() можно обращаться по простому имени без приставки ConsoleReader т.к. они в одном классе.
wadzimka_ddr
  • wadzimka_ddr
  • 0
  • Комментарий отредактирован 2014-09-16 14:57:47 пользователем wadzimka_ddr
не проходит тестирование… не пойму
<code>

public class ConsoleReader
{
public static String str;
public static String readString() throws Exception
{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String s=reader.readLine();
ConsoleReader.str=s;
return ConsoleReader.str;
}

public static int readInt() throws Exception
{
readString();
int i=Integer.parseInt(ConsoleReader.str);
return i;
}

public static double readDouble() throws Exception
{
readString();
double d=Double.parseDouble(ConsoleReader.str);
return d;

}

public static void readLn() throws Exception
{
readString();
while (!str.equals(null))
{
readString();
}

}
}</code>
Azazavr
while (!str.equals(null)) — тут не нулл, а проверка на новую строку.
Хотя я думаю, тут нужно прикручивать обработчик нажатий клавиш (keyEvent какой-то)…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.