2017-05-18 1 views
0

나는 자바로 블랙 잭 게임을 쓰기 시작했다. 나는 시작하기 위해 입력 한 현금이 유효한 정수가 아닌 경우 사용자가 다시 입력하도록 요청하는 프로그램을 얻으려고합니다. catch와 try 문에 대한 많은 예제가 있지만 그 중 아무 것도 작동하지 않습니다. InputMismatchException을 유형으로 해석 할 수 없다는 오류 메시지가 프로그램에 나타납니다. 내가 따라온 스레드는이 코드이고 다른 코드는 똑같은 코드입니다. 여기있어.Java-Try and Catch Statement

 Scanner input_var=new Scanner(System.in); 
     System.out.println("Welcome to BlackJack!"); 
     System.out.println("Enter how much money you will start with"); 
     System.out.println("Starting cash must be whole number"); 
     int money=0; 
     do{ 

     try{ 
      System.out.println("Enter how much money you will start with: "); 
      money=input_var.nextInt(); 
      } 

     catch (InputMismatchException e){ 
      System.out.println("Sry, not a valid integer"); 
      input_var.nextInt(); 
     } 
     input_var.nextLine(); 
     }while (money<=0); 

내 거의 정확한 코드가 작동하지 않는 이유와 어떤 도움을 크게 감상 할 수있다 : Java InputMismatchException

여기 내 코드입니다. 시간과 노력에 감사드립니다.

+1

예외를 가져 오는 것을 잊지 않았습니까? "import java.util.InputMismatchException" –

+0

지금 막 해보았지만 여전히 작동하지 않습니다. "sry not valid integer"를 인쇄하지만 사용자가 다시 숫자를 입력하도록하지는 않습니다. 뭐가 잘못 되었 니? –

+1

비즈니스 논리로 예외를 사용하는 것은 좋지 않습니다. 그들은 예외적 인 상황에서만 사용되어야합니다. 잘못된 입력은 자격이 없습니다. 이런 식으로 사용자 입력에 초점을 맞추는 것은 초보자 실수입니다. 왜 명령 행 인자로 시작하고 게임을 작동시키지 않겠습니까? 나중에 상호 작용을 추가하십시오. – duffymo

답변

2

input.nextInt()은 존재하지 않으므로 input.next()을 사용하여 섭취하십시오. 그것이 예외의 핵심입니다.

do{ 
    try{ 
     System.out.println("Enter how much money you will start with: "); 
     money=input_var.nextInt(); 
    }catch (InputMismatchException e){ 
     System.out.println("Sry, not a valid integer"); 
     input_var.next(); 
    } 
}while (money<=0); 
+0

여전히 "main"java.util.InputMismatchException 스레드에서 Exception과 동일한 오류가 발생합니다. –

+0

@BobG. 위와 똑같이하고 있습니까? 업데이트 된 코드를 게시하십시오. –

+0

@BobG. 완전한 코드는 http://ideone.com/F6JAZf –

1

while 루프 내에서 hasNextInt()를 사용할 수 있습니다. 다음 입력이 정수가 아닌 동안 "유효하지 않은 정수"메시지를 표시하고 다음 입력을 가져옵니다. 정수이면 while 루프가 중단되어 수행해야 할 작업을 수행 할 수 있습니다.

1

try 문과 input_var.nextLine();에서 input_var.nextInt();을 제거하십시오. import java.util.* 또는 import java..util.InputMismatchException과 같은 가져 오기가 있어야합니다.

어떤 IDE를 사용하고 있습니까?

+0

나는 이클립스를 사용하고있다. –

1

어쩌면 당신은 NumberFormatExcpetion을 찾고 있습니까? 그것은 문자열을 숫자로 변환 할 때 발생합니다. 대신 다음을 시도하십시오.

Scanner input_var=new Scanner(System.in); 
    System.out.println("Welcome to BlackJack!"); 
    System.out.println("Enter how much money you will start with"); 
    System.out.println("Starting cash must be whole number"); 
    int money=0; 

    do { 
     try { 
      System.out.println("Enter how much money you will start with: "); 
      money = Integer.parseInt(input_var.next()); 

     } 
     catch(NumberFormatException e) { 
      System.out.println("Sry, not a valid integer"); 
      input_var.next(); 
     } 

     input_var.next(); 

    } while (money<=0); 
+0

사용자가 6.7과 같은 것을 입력했는지, sry가 올바르지 않다고 말하면 7과 같이 입력해야합니다. 나는 f6 문자열 오류와 같은 입력 사용자를 찾고 아니에요. –

+0

예, 제 코드가 처리합니다. 'Integer.parseInt()'를 호출하고 있습니다. 사용자가 부동 소수점 숫자를 입력하면 throw되고 오류가 발생합니다. 그런 다음 double과 반대되는 정수를 구문 분석 할 수 없으며 'NumberFormatExcpetion'이 발생합니다. – nixin72