2017-12-21 24 views
-1

사용자가 두 개의 정수를 추가하여 반환하도록 요청하는 프로그램에서 작업하고 있습니다. 적어도 하나가 정수가 아닌 경우, 프로그램은 두 개의 유효한 입력을 계속 묻고 추가합니다. 여기잘못된 메시지를 표시하는 try-catch

package org.ip.sesion08; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class EntradaEnterosConExcepcion { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Scanner entrada = new Scanner(System.in);  
     int number1 = 0; 
     int number2 = 0; 
     boolean error = false; 
     while(!error){ 
      try{ 
     // Introducir dos enteros 
       System.out.print("Introduzca dos valores enteros: "); 
       number1 = entrada.nextInt(); 
       number2 = entrada.nextInt(); 
       error = true;  

      } 
      catch (InputMismatchException ne){ 
       System.out.print("Incorrecto, introduzca dos valores enteros: "); 
       entrada.next(); 
       entrada.next(); 


      } 
     } 
      System.out.println("La suma es " + (number1 + number2)); 
      } 

     } 

내 문제는 내가 (2 등) 잘못된 입력 뭔가, 프로그램이 나에게 캐치의 메시지와 inmediately 후 시도에서 하나를 표시 한 후, 것입니다 내 코드입니다. 내가 뭘 잘못하고 있는지 모르겠다. 다시 시도에서 메시지를 표시하지 않으려면 어떻게해야합니까? 미리 감사드립니다.

+0

왜 캐치 내부에서 입력을 다시 잡으려고합니까? –

+0

"시도 중"이라는 메시지는 무엇을 말하고 있습니까? 출력을 공유해 주시겠습니까? – darkpbj

+0

메시지를 변수로 저장하고 catch에서 업데이트 할 수 있습니다. – user2478398

답변

0

while 루프 외부에 메시지를 넣으면 예상되는 결과를 얻을 것이라고 생각합니다. 입력에서 사용할 수있는 다음의 토큰이 int으로 해석 할 수없는 경우 다음은,

package org.ip.sesion08; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class EntradaEnterosConExcepcion { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    Scanner entrada = new Scanner(System.in);  
    int number1 = 0; 
    int number2 = 0; 

    // Introducir dos enteros 
    System.out.print("Introduzca dos valores enteros: "); 
    boolean error = false; 
    while(!error){ 
     try{ 

      number1 = entrada.nextInt(); 
      number2 = entrada.nextInt(); 
      error = true;  

     } 
     catch (InputMismatchException ne){ 
      System.out.print("Incorrecto, introduzca dos valores enteros: "); 

     } 
    } 
     System.out.println("La suma es " + (number1 + number2)); 
     } 

    } 
0

를 작동 할 수 있습니다, 다음 Scanner.nextInt() 당신이 잡을 InputMismatchException을 던졌습니다. 이 문제를 일으키는 토큰은 검사되지 않은 채로 남아 있으므로 catch 블록이 토큰 중 하나를 검사하고 거부하는 것이 합리적입니다. 악의적 인 것 다음에 나오는 토큰도 조사하지 않고 바로 버립니다.

그 다음에는 분명히 의도 한대로 실행이 확실히 루프의 맨 위로 순환합니다. try 블록을 다시 입력하므로 프롬프트가 다시 인쇄됩니다. 프롬프트를 다시 인쇄하지 않으려면 루프 바로 전으로 이동하십시오.

그러나 프로그램에 두 개의 연속 된 숫자가 입력되어야합니다. 숫자를 입력 한 다음 숫자가 아닌 숫자를 입력하면 루프백 할 때 초기 숫자가 잊어 버리게됩니다. 한 번에 두 개가 아닌 토큰 단위로 입력 루프를 수행하는 것이 좋습니다. 예를 들어 종료 조건이 성공적으로 입력 된 숫자를 측정하는 단일 루프를 사용할 수 있습니다. 그것은 별도의 변수 대신 배열이나 List를 사용하여 숫자를 기록하는 것이 좋습니다.