2012-09-27 4 views
2

이 항목은 제가 작업중인 프로그램의 일부입니다. 사용자가 올바른 번호를 입력했는지 확인하려고합니다.사용자 입력 유효성 검사에 문제가 있습니다.

선택할 수있는 다섯 가지 선택 항목이 있으므로 1, 2, 3, 4 또는 5 중 하나를 누르십시오. 그런 다음 Enter 키를 누릅니다.

그래서 사용자가 < 1 또는 5를 입력하지 않았는지 확인하고 싶습니다. 그 부분이 작동하도록했습니다.하지만 더 쉬운 방법이 있는지 알고 싶습니다. 그때 내가 아래 코드에서했던 것에서.

다음 부분은 사용자가 글자를 입력하지 않도록하려는 것입니다. 선택을 위해 "gfgfadggdagdsg"를 좋아하십시오.

여기

public void businessAccount() 
    { 


     int selection; 

     System.out.println("\nATM main menu:"); 
     System.out.println("1 - View account balance"); 
     System.out.println("2 - Withdraw funds"); 
     System.out.println("3 - Add funds"); 
     System.out.println("4 - Back to Account Menu"); 
     System.out.println("5 - Terminate transaction"); 
     System.out.print("Choice: "); 
     selection = input.nextInt(); 

      if (selection > 5){ 

      System.out.println("Invalid choice."); 
      businessAccount(); 

     } 
      else if (selection < 1){ 
       System.out.println("Invalid choice."); 
       businessAccount(); 
      } 
      else { 

     switch(selection) 
     { 
     case 1: 
      viewAccountInfo3(); 
      break; 
     case 2: 
      withdraw3(); 
      break; 
     case 3: 
      addFunds3(); 
      break; 
     case 4: 
      AccountMain.selectAccount(); 
      break; 
     case 5: 
      System.out.println("Thank you for using this ATM!!! goodbye"); 
     } 
      } 
    } 
+0

이 코드는 정상입니다. '< 1' and '> 5'를 체크하지 말자.'invalid input'을 출력하는 디폴트 케이스를 넣을 수있다. – Nishant

+0

재귀에주의를 기울여야한다. 문제가 생길 수 있으며, 익숙하지 않으면 이상한 오류가 발생할 수있다. 예를 들어, 코드에서 businessAccount를 businessAccount에서 호출 할 때 else 문 외부에 코드가 있으면 여러 번 실행하고 마지막으로 실행하는 시간은 예상 한 시간이 아닐 수 있습니다. 지금은 괜찮습니다.하지만이 방법을 나중에 편집하면 예기치 않은 동작이 발생할 수 있습니다. – Scott

+1

또한 오류 메시지를 인쇄하려면 switch 문 아래쪽에 'default'를 추가하는 것이 좋습니다. – Scott

답변

7

default 사례를 추가하여 < 1> 5을 확인할 수 있습니다.

try{ 
    selection = input.nextInt();   
    switch(selection){ 
     case 1: 
      viewAccountInfo3(); 
      break; 
     case 2: 
      withdraw3(); 
      break; 
     case 3: 
      addFunds3(); 
      break; 
     case 4: 
      AccountMain.selectAccount(); 
      break; 
     case 5: 
      System.out.println("Thank you for using this ATM!!! goodbye"); 
      break; 
     default:    
      System.out.println("Invalid choice."); 
      businessAccount(); 

     } 
}catch(InputMismatchException e){ 
    //do whatever you wanted to do in case input is not an int 
} 
+0

답장을 보내 주셔서 감사합니다. 또한 사용자가 문자가 아닌 숫자를 입력했는지 확인하는 방법은 무엇입니까? –

+0

[이] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#nextInt%28int%29)에서'InputMismatchException'을 catch 한 다음 오류 메시지를 표시하십시오. – Nishant

1

대안이 작동 얻기 위해 정규 표현식을 사용하는 것 .... 내가 작업하고있는 부분의 내 코드입니다. 문자열 x가 있다고 가정하면

문자열 x = "something";

경우 (x.matches) ("정규식") 캐치를 서라운드 시도되는이 작업을 수행하는 {

}

또 다른 방법.

0

이 같은 뭔가를 할 수 BufferedReader 사용 : 도움이

InputStreamReader isr = new InputStreamReader(System.in); 
BufferedReader br = new BufferedReader(isr); 
String s = br.readLine(); 
int selection = 0; 

try{ 
    selection = Integer.parseInt(s); 
    if(selection > 5 || selection < 1){ 
     System.out.println("Invalid choice."); 
     businessAccount(); 
    }else{ 
     // your switch code here 
    } 
    // you can use @Nishant's switch code here. it is obviously better: using switch's default case. 
}catch(NumberFormatException ex){ 
    // throw new Exception("This is invalid input"); // or something like that.. 
    System.out.println("Invalid choice."); 
    businessAccount(); 
} 

희망을.

참고 : import java.lang.NumberFormatExceptionimport java.io.InputStreamReaderimport java.io.BufferedReader

+0

br에 오류가 발생했습니다.readline(); 처리되지 않은 IOEXCEPTION을 말함 –

+0

현재 캐치 블록 뒤 또는 앞에 캐치 (IOException ex) {} 블록을 추가 할 수 있습니다. – Prasanth

+0

무슨 뜻인지 모르겠지만 여전히 새로운 자바 –

0

스위치 케이스 더 나은 및 더 빠른 속도의를 사용해야합니다 만약 당신이 특정로부터 선택을 확인 문.

관련 문제