2014-02-28 2 views
0

나는 작은 프로그램을 작성하고있다. (학생이지만, 클래스를위한 과제는 아니지만, 이전 과제의 놀이 임). 이전에는 클래스 용으로 do/while 루프를 학습하면서 사용자에게 정수를 입력하라는 프로그램을 작성했습니다. 사용자가 0을 입력하면 루프에서 벗어나서 입력 된 모든 정수의 제곱의 합을 출력합니다.스캐너를 사용할 때 변수 유형을 확인하는 것

타입 정수 : 3

타입 정수 : 0

제곱의 합은 9

내 목표 지금

출력 예 (개행 이격 더블) 그것을 한 걸음 더 나아가는 것입니다. 작성된 것처럼 사용자가 정수가 아닌 다른 값을 입력하면 프로그램이 중단됩니다. 나는 사용자가 충돌하지 않고 다른 형태의 값을 입력 할 수있는 방법을 찾기 위해 노력하고있다. 아래 코드 (임의의 값에서 충돌을 일으키는 프로그램)를 참조 할 때 console.hasNextInt() 메서드를 사용하여 if 문을 변형 해 보았습니다. 그러나 이것에 대한 나의 시도는 do/while 테스트의 number 테스트가 참조되지 않았을 수 있다는 오류를 일으킬 수 있습니다.

아무에게도 조언을 해 줄 수있는 사람이 있습니까? 그것은 인정 될 것이다.

public static void userInterface() { 
    Scanner console = new Scanner(System.in); 

    int number; 
    int numberSquared; 
    int squaredOutput = 0; 

    do { 
     System.out.print("Type an integer (0 to quit): "); 
     number = console.nextInt(); 

     if (number > 0 || number < 0) { 
      numberSquared = number * number; 
      squaredOutput += numberSquared; 
     } 
    } while (number != 0); 


    System.out.println("The sum of the squares is " + squaredOutput); 
}  
+0

문제는 무엇을 사용합니까? –

+0

int가 아닌 int를 입력하면 프로그램을 끝내시겠습니까? 또는 루프를 무시하고 계속할 것인가? – Cruncher

+0

나의 초기/장황한 문장을 용서하십시오. 이상적으로, 사용자가 char, string, double 등을 입력하면 프로그램이 중단되지 않고 잘못된 응답을 입력했음을 사용자에게 경고하고 다시 시도하도록 요청하는 것이 이상적입니다. – Rivers31334

답변

2

문제는 다음 int를 사용하는 console.nextInt();을 사용하고 있다는 것입니다.

다음을 사용할 수 있습니다. console.nextLine();.

그것은 당신의 프로그램이 문자열을 받아 들일 수있는 것입니다 그리고 당신은 필요한 지능으로 구문 분석 할 수 있습니다 코드에 문제가

try { 
     number=Integer.parseInt(console.nextLine()); 
    } catch(NumberFormatException e) { 
     System.out.println("Please input an Integer"); 
    } 
+0

이것은 정확함에 가깝습니다. 계속할 필요가 있습니다. 너의 캐치 블록에. 숫자를 먼저 0이 아닌 값으로 설정하십시오. – Cruncher

+0

downvoted 대답은 OP의 문제를 대답했다.OP는'do ... while' 루프 외부에서 "숫자"를 초기화해야합니다. – ProgrammerDan

+0

@ProgrammerDan '처음/장황한 문장을 용서하십시오. 이상적으로, 사용자가 char, string, double 등을 입력하면 프로그램이 충돌하지 않고 유효하지 않은 응답을 입력했음을 사용자에게 경고하고 다시 시도하도록 요청하는 것이 이상적입니다. ' -OP – Cruncher

0

있습니다. console.nextInt()을 사용할 때 스캐너는 모든 문자열을 정수로 구문 분석합니다. 더 좋은 해결책은 console.nextLine()을 사용하고 자신의 숫자를 구문 분석하여 원하는 문자열로 구문 분석 할 수없는 경우 던져 질 수있는 예외를 잡아내는 것입니다. 단순히 이렇게 보일 수 있습니다.

String yourValue = console.nextLine(); 
try{ 
    int value = Integer.parseInt(yourValue); 
}catch(NumberFormatException e){ 
    System.out.println("watch out this value is unparsable!"); 
} 
1

그냥이 기능

public static int next(String message) { 
    while (true) { 
     System.out.println(message); 
     try { 
      return new Scanner(System.in).nextInt(); 
     } catch (Exception e) { 
      System.out.println("Invalid input."); 
     } 
    } 
} 
+0

이제 이것이 가장 좋은 답변입니다. 이것을 인라인으로 작성하려고했습니다. 어쨌든 방법으로는 아마도 더 좋을 것 같습니다. – Cruncher

+0

네, 죄송합니다. 지금부터 전체 질문을 읽어야합니다. –

관련 문제