2015-01-27 2 views
0

자바를 사용한 지 몇 년이 지났습니다. 커맨드 라인 입력의 유효성을 검증하는 가장 좋은 방법은 무엇인지 모르겠습니다.커맨드 라인 인수 검증하기 사용자 입력

내 코드는 현재과 같이 구성되어 있습니다 : 그것은 방법으로 고토 문을 사용하는 것과 비슷 때문에

while (true) { 
    try { ... break; } catch(...) {...} 
} 

나는이 가난 연습이다 생각합니다.

사용자 입력의 유효성을 검사하는 더 좋은 방법이 있습니까?

단순히 부울을 선호하는 방법을 사용하고 있습니까?

편집 :

구체적으로는, 표준 입력 (스캐너)로부터 사용자 입력을 검증. 의 범위에

뭔가 :

while(true){ 
    try { 
     userInput = Integer.parseInt(stdin.next()); 
     break; 
    } catch (InputMismatchException e) { 
     ... 
    } 
} 
+1

당신이 더 구체적 일 수 있습니다 :이 같은 더

뭔가? 어떤 종류의 유효성 검사입니까? while 루프 동안? – Crazyjavahacking

+0

당신은이 문서를 chechk 할 수 있습니다 : http://www.cse.yorku.ca/~mack/1011/InputValidation.PDF – pcejrowski

+0

당신이 준 예제에서, 당신의 루프는 명확하고 잘 수행 할 수 있습니다. 당신이 필요로하는만큼 빠르게, 병목 현상이 인간이 될 것임을 감안할 때). "절대 goto-like 구문을 사용하지 마십시오"와 같은 절대성은 항상 올바르지 않습니다. 사람들은 또한 제어 흐름으로 예외를 사용하지 말라고 말하지만,이 경우에는 "Integer.parseInt"가 어떻게 작동하는지에 따라 다소 차이가 있습니다. (나는 당신이 그것을 분석하기 전에 문자열을 미리 검증하기 위해 논리를 복제 할 수 있다고 생각하지만, 그렇게하기를 원하지는 않는다.) – yshavit

답변

1

당신이 허용 무엇을하지만, 나는 그들이 당신의 검증과 일치하지 않는 입력 한 경우 메시지 적어도 출력하는 것을 선호합니다.

int userInput; 
System.out.println("Please enter an integer:"); 
while(true){ 
    try { 
     userInput = Integer.parseInt(stdin.next()); 
     break; 
    } catch (InputMismatchException e) { 
     System.out.println("Please enter a valid integer:"); 
    } 
} 
+0

OP가 원래 있던 것처럼'valid' 플래그 대신'break'를 사용합니다. 조금 더 간단하면서도 동일한 최종 효과가 있습니다 (필요하지 않은 상태를 유지하고 업데이트하는 이유는 무엇입니까?). – yshavit

+1

흠, 예. 그게 좋은 이유 야. 내 대답을 편집 할게. – mbomb007