2014-11-14 2 views
0

У меня есть следующий фрагмент кода, где я пытаюсь заставить пользователя вводить только целые числа; если строка введена, тогда будет отображаться сообщение об ошибке системы «Пожалуйста, введите только цифры», а затем снова появится «Введите свой номер ID:». Я попытался использовать метод try/catch, но не использовал его правильно - новичок. Я знаю, что могу использовать «NumberFormatException», но не знаю, где. Может ли кто-нибудь помочь? Благодаря!Использование Try/Catch в JAVA

 //Get Customer ID and Account Number 
     do 
     { System.out.print("Enter your ID#: "); 
      custid = Integer.parseInt(input.readLine()); 
      System.out.print("Enter your Account Number#: "); 
      custacctnum = Integer.parseInt(input.readLine()); 
     //validate the choice 
      for(int i=0; i<people.length; i++) 
      { if ((people[i].custid == custid) && (people[i].custacctnum == custacctnum)) 
       { match = true; 
       System.out.println("Welcome " +people[i].firstname+ " to JJ Dealership!"); 
       for(int p=0; p<cluster.length; p++) 
        System.out.println(+(p+1)+ ": " +cluster[p].year+"," +cluster[p].make+ "," +cluster[p].model); 

       System.out.println(people[i].firstname+ ", what color car would you like?"); 
        break; 
       } 
      } 
      if (!match) 
      { System.out.println("Invalid ID"); 
     } while (!(match)); 
+2

Вы смотрели на (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt)() метод [hasNextInt()]? Я предполагаю, что вы используете сканер для ввода. – csmckelvey

+0

@jenayasslisa вы используете сканер или буферчик? –

+0

@KickButtowski Я использую BufferedReader – jenayaalisa

ответ

0

Исключения должны быть в исключительных случаях. Я предлагаю вам использовать Scanner и hasNextInt() только continue, если это не int. То есть сделать Scanner как,

Scanner input = new Scanner(System.in); 

, а затем что-то, как это будет работать,

do { 
    System.out.print("Enter your ID#: "); 
    if (!input.hasNextInt()) { 
     System.out.printf("%s is not an int.%n", input.nextLine()); 
     continue; 
    } 
    custid = input.nextInt(); 
    System.out.print("Enter your Account Number#: "); 
    custacctnum = input.nextInt(); 
    if (!input.hasNextInt()) { 
     System.out.printf("%s is not an int.%n", input.nextLine()); 
     continue; 
    } 

Если вы действительно хотите использовать try-catch это должно выглядеть примерно так,

do 
{ 
    try { 
     System.out.print("Enter your ID#: "); 
     custid = Integer.parseInt(input.readLine()); 
     System.out.print("Enter your Account Number#: "); 
     custacctnum = Integer.parseInt(input.readLine()); 
    //validate the choice 
     for(int i=0; i<people.length; i++) 
     { if ((people[i].custid == custid) && 
        (people[i].custacctnum == custacctnum)) 
      { match = true; 
      System.out.println("Welcome " +people[i].firstname 
        + " to JJ Dealership!"); 
      for(int p=0; p<cluster.length; p++) 
       System.out.println("" + (p+1) + ": " +cluster[p].year+"," 
         + cluster[p].make+ "," +cluster[p].model); 

      System.out.println(people[i].firstname 
        + ", what color car would you like?"); 
       break; 
      } 
     } 
    } catch (NumberFormatException nfe) { 
     nfe.printStackTrace(); 
    } 
} while (!(match)); 
+0

op использует этот input.readLine(), что означает, что op использует bufferreader, а не сканер. Я думаю, –

+0

@KickButtowski Я знаю. Я предложил перейти на «Сканер». –

+0

может быть требованием использовать bufferreader не сканер? –

0

@ Эллиот Фриш, я «играл» с ним, прежде чем увидел ваш ответ и понял, как использовать try/catch. Это было довольно просто, но я посмотрю на другой вариант, который вы разместили. При обновленном коде ниже, когда пользователь вводит строку, он отобразит сообщение об ошибке, а затем вернет их в строку «Введите свой номер ID», чтобы повторить попытку.

Благодарю вас за то, что вы ответили быстро.

do 
     { 
      try{ 
       System.out.print("Enter your ID#: "); 
       custid = Integer.parseInt(input.readLine()); 
       System.out.print("Enter your Account Number#: "); 
       custacctnum = Integer.parseInt(input.readLine()); 
     //validate the choice 
      for(int i=0; i<people.length; i++) 
      { if ((people[i].custid == custid) && (people[i].custacctnum == custacctnum)) 
       { match = true; 
       System.out.println("Welcome " +people[i].firstname+ " to JJ Dealership!"); 
       for(int p=0; p<cluster.length; p++) 
        System.out.println(+(p+1)+ ": " +cluster[p].year+"," +cluster[p].make+ "," +cluster[p].model); 

       System.out.println(people[i].firstname+ ", what color car would you like?"); 
        break; 
       } 
       } 
        if (!match) 
        { System.out.println("Invalid ID"); 
      } 
      } catch (NumberFormatException e) 
      {System.out.println ("Error! Please enter a number!");} 
      } while (!(match)); 
Смежные вопросы