2017-10-21 8 views
0

사용자가 int를 입력하고 범위가 10-20까지인지 확인하려고합니다.
범위를 벗어나는 int를 처음 입력하면 오류가 발생합니다 그런 다음 문자열을 입력하십시오. 숫자가 지정된 범위 사이가 될 때까지 입력을 계속하도록 사용자에게 계속 요청하는 방법에 대해서는 확실하지 않습니다. 도움이 될 것입니다.모든 가능성에 대한 사용자 입력 유효성 검사

public static void main(String[] args) { 

    Scanner scnr = new Scanner(System.in); 

    int width = 0; 
    int height = 0; 

    System.out.println("Welcome to Mine Sweeper!"); 
    System.out.println("What width of map would you like (10 - 20): "); 
    //width = scnr.nextInt() 
    while (!scnr.hasNextInt()) { 
     System.out.println("Expected a number from 10 to 20"); 
     scnr.next(); 
    } 
    do { 
     width = scnr.nextInt(); 
     if (width < 10 || width > 20) { 
      System.out.println("Expected a number from 10 to 20"); 
      //width = scnr.nextInt(); 
     } 
    } while (width < 10 || width > 20); 
} 
+0

오류를 게시하십시오! – phpdroid

답변

0

이 시도 : 이것은 당신이 원하는 일을해야

Scanner scnr = new Scanner(System.in); 

    int width = 0; 
    int height = 0; 

    System.out.println("Welcome to Mine Sweeper!"); 
    while(true) 
    { 
     System.out.println("What width of map would you like (10 - 20): "); 
     try{ 
      width = scnr.nextInt(); 
      System.out.println(width); 
      if (width < 10 || width > 20) 
      { 
       System.out.println("Expected a number from 10 to 20"); 
      } 
      else 
       break; 
     }catch(Exception e) 
     { 
      System.out.println("Expected a number from 10 to 20"); 
      scnr.next(); 
     } 
    } 
    scnr.close(); 
+0

try 및 catch를 사용하지 않고이 작업을 수행 할 수있는 방법이 있습니까? – JRob

+0

@JRob'try/catch'를 사용하지 않으면 사용자가'int' 대신'String'을 입력 할 때 어떻게 예외를 처리하겠습니까? 업데이트 된 코드도 확인하십시오. –

0

:

while (scnr.hasNext()) { 
    if (scnr.hasNextInt()) { 
     width = scnr.nextInt(); 
     if (width >= 10 && width <= 20) { 
      break; 
     } 
    }else{ 
     scnr.next(); 
    } 
    System.out.println("Expected a number from 10 to 20"); 
} 
System.out.println("width = " + width); 
0

내가 알고있는 것처럼, 당신은 단지의 범위 사이의 정수 값을 허용하고자하는 10 및 20 포함. 문자 또는 문자열이 입력 된 경우 메시지를 인쇄하고 실행을 계속하기를 원합니다. 그렇다면, 이것은 당신이 원하는 것과 비슷해야합니다. 원래 try-catch 문을 사용하여이 질문에 대답하려고했으나 다른 대답에 응답하여 시도 캐치을 사용하는 것과 다른 방법을 원한다고 나타났습니다. 이 코드는 100 % 작동하지 않습니다. 당신은 어떤 것들을 조정할 필요가있을 것입니다 그러나 그것은 당신이 내가 시도 캐치 성명을 사용하지 않고 생각하고 찾고있는 것과 매우 가깝습니다.

public static void main(String args[]) 
{ 
    Scanner scanner = new Scanner(System.in); 
    int width = 0; 
    int height = 0; 
    int validInput = 0; //flag for valid input; 0 for false, 1 for true 

    System.out.println("Welcome to Mine Sweeper!"); 
    System.out.println("What width of map would you like (10 - 20): "); 

    while (validInput == 0) //while input is invalid (i.e. a character, or a value not in range 
    { 
     if (scanner.hasNextInt()) 
     { 
      width = scanner.nextInt(); 
      if (width >= 10 && width <= 20) 
      { 
       validInput = 1; //if input was valid 
      } 
      else 
      { 
       validInput = 0; //if input was invalid 
       System.out.println("Expected a number from 10 to 20."); 
      } 
     } 
     else 
     { 
      System.out.println("You must enter integer values only!"); 
      validInput = 0; //if input was invalid 
     } 
     scanner.next(); 
    } 
}