2017-11-08 2 views
0

사용자가 입력 할 수있는 것에 대한 제약을주기위한 방법을 찾고 있습니다. 보다 구체적으로, 입력은 프로그램 내에서 특정 제한을 존중해야합니다. 또한 나는 한계를 존중하는 정수를 제공하지 않는 한 사용자에게 유효한 입력을 계속 요청하고 싶습니다. 필자의 주요 포인트는 InputMismatchException (사용자가 문자열을 입력하는 경우)을 잡아 내고 정수 입력이 한계 내에 있지 않으면 입력을 다시 요청하는 것입니다. try catch 메서드를 사용하는 방법에 관해서 혼란 스럽다. 어떤 도움을 주시면 감사하겠습니다! 고맙습니다.입력에 둘 이상의 제한 조건이있는 경우 사용자에게 유효한 정수 입력을 계속 요청하는 방법

Scanner sc = new Scanner(System.in); 
System.out.println("Please enter your next move: "); 
int rowNum = sc.nextInt(); 
int columnNum = sc.nextInt(); 
try { 
    while (((rowNum < 0)||(columnNum < 0)) || ((rowNum >= Board.length)||(columnNum >= Board[0].length))) { 
     System.out.println("Your move is not valid, Please enter a valid move");  
     rowNum = sc.nextInt(); 
     columnNum = sc.nextInt(); 
    } 
    while (Board[rowNum][columnNum] != ' '){ 
     System.out.println("Your move is not valid, Please enter a valid move"); 
     rowNum = sc.nextInt(); 
     columnNum = sc.nextInt(); 
    } 
} catch(Exception e) { 
     System.out.println("Your move is not valid, please enter a valid move"); 
     sc.nextInt(); 
} 
+0

가능한 복제 ([루프가 Double.IsNaN을 부적절하게 구문 분석하는 동안] https://stackoverflow.com/questions/42095950/while-loop-parsing-double-isnan-improperly) – Izruo

답변

0

내 방법에는 일반적으로 do while loop이 포함됩니다. 나는 보통이 같은 끝낼 :

boolean valid = false; 
int input = -1; 
Scanner in = new Scanner(System.in); 
do{ 
    System.out.println("Please enter a number bigger than 5: "); 
    String val = in.nextLine(); 
    if(val.matches("\\d+")) 
     input = Integer.parseInt(val); 

    if(input ==(int)input && input > 5) 
     valid = true; 
}while(!valid); 

System.out.print(input + " is greater than 5."); 

이 값은 내가 다른 대답 지적이 [post]에서 발견 된 코드를 사용하는 정수가 있는지 확인하려면이가 있는지 확인하지 않습니다 문제가 될 수있는 int보다 큽니다.

이렇게하면 원하는만큼 많은 제약 조건을 확인하려는 if 문을 추가 할 수 있습니다!

+0

oops는'! valid' 대신에'valid'를 가지고 있습니다 ... 그 후 수정되었습니다 –

+0

그래, 이걸 이해하지만, 동시에 그걸 막으려하고있어. 사용자가 문자열을 입력으로 제공하지 않습니다 ... – Alek

+0

@Alek 코드를 변경 했으므로 이제 입력에 숫자가 포함되어 있는지 확인합니다. –

0

이 경우 try-catch가 필요하지 않을 수 있습니다. 당신이 입력이 유효한지 말한다 방법을 만들 경우

Scanner sc = new Scanner(System.in); 
System.out.println("Please enter your next move: "); 
int rowNum; 
int columnNum; 
boolean validInput = false;  
while(!validInput) { 
    rowNum = sc.nextInt(); 
    columnNum = sc.nextInt(); 
    if(rowNum >= 0 && columnNum >= 0 && rowNum < Board.length && columnNum < Board[0].length && Board[rowNum][columnNum] == ' ') { 
     validInput = true; 
    } 
} 

당신은 또한 청소기 코드를 구현할 수 있습니다 : 당신은 출력의 올바른 양식을 얻을 루프 밖으로 얻을 때 당신은 부울 변수를 설정처럼 뭔가를 할 수 아니 이런 걸 할 수있는 :

boolean validateInput(int rowNum, int columnNum, int rowBound, int columnBound, char c) { 
    return rowNum >= 0 && columnNum >= 0 && rowNum < rowBound && columnNum < columnBound && c == ' '; 
} 

// In the main program 
do { 
    // get user input 
}while(validateInput(...)) 
+0

OP는 입력이 문자열인지 아닌지 먼저 확인합니다. –

관련 문제