0

스캐너가 double을 요구하면서 InputMismatchException을 잡으려고하는데 입력 값이 "c"또는 "q"와 같으면 실행하고 싶습니다. catch 블록의 특정 코드 예외가 throw 된 후 사용자 입력 값을 가져 오는 방법이 있는지 궁금합니다. 예를 들어, 코드가 double을 요구하고 사용자가 "c"라는 글자를 입력하면, 나는 "c"가 입력되었다는 것을 알기를 원합니다.Java : 예외를 던진 사용자 입력 값 받기

double value = 0.0; 

try{ 
    System.out.print("\nEnter a number: "); 
    value = input.nextDouble(); 
} 
catch(InputMismatchException notADouble){ 
    if(notADouble.getValue().equalsIgnoreCase("c")){ 
     //run the specific code for "c" 
    } 
    else if(notADouble.getValue().equalsIgnoreCase("q")){ 
     //run the specific code for "q" 
    } 
    else{ 
     System.out.print("\nInvalid Input"); 
    } 
} 

감사를 사전에 입력 :

에 대해 : 여기에 "getValue()가"만들어 낸 메소드 이름 난 달성하기 위해 노력하고있어 설명하는 것입니다 내가 작성하는 노력하고있어 코드의
+1

Double.parseDouble() 함수를 검사하면 Scanner.next() 또는 Scanner.nextLine(); – EyeOfTheHawks

답변

2

스캐너를 숫자로 변환하기 전에 Scanner.hasNextDouble()을 사용하여 입력 내용의 유효성을 검사하십시오. 이 같은 것이 작동해야합니다 :

double value = 0.0; 

    Scanner input = new Scanner(System.in); 

    System.out.print("\nEnter a number: "); 
    while(input.hasNext()) 
    { 
     while(input.hasNextDouble()) 
     { 
      value = input.nextDouble(); 
     } 

     String next = input.next(); 

     if("c".equals(next)) 
     { 
      //do something 
     } 
     else if("q".equals(next)) 
     { 
      //do something 
     } 
     else 
     { 
      System.out.print("\nInvalid Input"); 
      //return or throw exception 

     } 
    } 
+0

hasNext 메소드를 완전히 잊어 버렸습니다. +1 이제이 사실을 알았으므로 사용자 입력을 시도하거나 잡을 필요가있는 이유가 있습니까? 아니면 스캐너 클래스에 입력 예외를 방지하는 데 필요한 모든 메서드가 있습니까? – Justin

+0

모든 next()에 대해 hasNext() 메소드가 일치하는 경우 - 확인하지는 않았지만 한 눈에 본다 - 모든 next() 호출 전에 선점 적으로 입력을 확인할 수 있습니다. 그러나 이것은 아마도 약간 비싸며 스캐너가 사양을 충족해야하는 매우 큰 파일을 스캔하는 경우가 있습니다. 예외를 사용하여 선점 검사와 선결 검사를 수행하면 성능이 향상됩니다. – lreeder

-1

입력으로 문자열을 읽은 다음 변환을 수행해야합니다.

+1

댓글이어야합니다. – alfasin