Консольный ввод Java. Разбор строки - PullRequest
2 голосов
/ 28 марта 2012

У меня есть консольное приложение, в котором мне нужно вводить цифры, пока не введем "x".Конечно, когда я введу "x", я получу исключение NumberFormatException.

Как мне выйти из программы при вводе "x" без исключения.

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
    String s;
    int input;
    String name = args[0];
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    Date date = new Date();


    System.out.println("Good morning " + name + " Today's date is " + sdf.format(date));

    System.out.println("Please enter any number between 0 and 10");

    try
    {


        do
        {
        s = buf.readLine();

        input = Integer.parseInt(s);

        while(input <= 0 || input > 10)
        {
            System.out.println("Make sure about the correct input...between 0 and 10 please");
            s = buf.readLine();
            input = Integer.parseInt(s);
            System.out.println(input);
        }
        }while(s != "x");

Ответы [ 7 ]

3 голосов
/ 28 марта 2012

Просто добавьте строку

s = buf.readLine();
if ("x".equals(s)) break; // add this line

Это не гарантирует, что s является целым числом, поэтому вам все равно нужно поймать исключение, подобное предложенному andreas

3 голосов
/ 28 марта 2012

Переупорядочить цикл (ы), чтобы проверить, равен ли s x перед Integer.parseInt().Используйте String.equals() для сравнения строк, а не == или !=.

Поскольку это домашняя работа, я не буду публиковать измененный код.

РЕДАКТИРОВАТЬ:

Просто чтобы объяснить причину использования String.equals():

Из раздела 15.21.3 Операторы ссылочного равенства == и! = Спецификации языка Java 3.0 :

Хотя == может использоваться для сравнения ссылок типа String, такой тест на равенство определяет, ссылаются ли два операнда на один и тот же объект String.Результат равен false, если операнды являются различными объектами String, даже если они содержат одинаковую последовательность символов.Содержимое двух строк s и t можно проверить на равенство с помощью вызова метода s.equals (t).

2 голосов
/ 28 марта 2012

Поймай исключение:

s = buf.readLine();
if("x".compareToIgnoreCase(s)) {
  // im quit
  return;
}
2 голосов
/ 28 марта 2012

Перейдите в цикл while и выполните

while (s != "x") {
  // your logic

}

или проверьте, если s! = "X" перед этой строкой:

input = Integer.parseInt(s);
2 голосов
/ 28 марта 2012

Оберните оператор Integer.parseInt в блок try / catch:

try {
 input = Integer.parseInt(s);
} catch{NumberFormatException nfe) {
 System.out.println("Illegal input");
 // know you could do one of the following: (uncomment)
 // continue;        // would continue the while loop
 // break;           // would exit the while loop
 // System.exit(0);  // would exit the application
}
2 голосов
/ 28 марта 2012

Оберните код в блок try..catch.

input=-1;
try{
  input = Integer.parseInt(s);
  while(input <= 0 || input > 10)
  {
   System.out.println("Make sure about the correct input...between 0 and 10 please");
   s = buf.readLine();
   input = Integer.parseInt(s);
   System.out.println(input);
   }
}catch(Exception ex) { }
....
1 голос
/ 28 марта 2012

Добавьте оператор if перед обработкой строки в int:

    if(s.equals("x"))
       system.exit(1);

    else{
    input = Integer.parseInt(s);

            while(input <= 0 || input > 10)
            {
                System.out.println("Make sure about the correct input...between 0 and 10 please");
                s = buf.readLine();
                input = Integer.parseInt(s);
                System.out.println(input);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...