2012-10-13 2 views
1

안녕하세요 저는 시작 프로그래밍입니다. 저는 입력을 검증하기 위해 루프를 사용하여 연습하고 있습니다. 불행히도 루프는 작동하지만 내부 루프를 건너 뜁니다. 이제 오류 메시지가 나타나거나 프롬프트가 표시됩니다 ...자바 프로그램이 내 루프를 건너 뛰는 이유는 무엇입니까?

여기 내 코드는 다음과 같습니다. [이 입력란에 대한 답변으로이 입력란에 대한 의견을 남기고 테스트 할 수있었습니다. IT.]

import java.util.Scanner; 

public class ValidationTest 
{ 
public static void main(String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 
    int number; 
    do { 
     System.out.println("Please enter a positive number!"); 
     while (!sc.hasNextInt()) 
     { 
      System.out.println("That's not a number!"); 
      sc.next(); // this is important! 
     } 
     number = sc.nextInt(); 
     } while (number <= 0); 
    System.out.println("Thank you! Got " + number); 
} 
} 
+0

숫자가 아니고 음수 인 경우 오류 메시지가 나타나기 만하면 오류 메시지 나 프롬프트없이 반복됩니다. –

답변

0

내부 루프 : 귀하의 의견은 숫자가 아닌 경우 입력 -123, 기능 !sc.hasNextInt()이 false 인 경우는 루프를 건너 뛸 수 있습니다, 그래서 당신이를 확인하려면

while (!sc.hasNextInt()) 
    { 
     System.out.println("That's not a number!"); 
     sc.next(); // this is important! 
    } 
    number = sc.nextInt(); 

만, 확인 숫자가 음수, 할당 숫자 값 이후에이 검사를 추가

if(number <= 0){ 
    System.out.println("The number is negative!"); 
} 

당신은 수를 확인하기위한 또 다른 루프를 필요가 없습니다 것은 부정 여부를 첫 번째 루프의 그것을했기 때문에, 그리고 do...while 루프는 것 적어도 한 번 루프를 실행해야합니다.

+0

정말 고마워, 그 대답이 너무 단순하다고 믿을 수 없어. > B-D –

0

while 루프는 루프 while 처음 실행될 때 (while 후 괄호) 조건이 거짓 인 경우 생략 될 것이다.

디버거를 사용하여 코드를 단계별로 실행하여 진행 상황을 확인할 수 있습니다.

디버거 사용법을 모르는 경우 수행중인 모든 작업을 중단하고 Google 검색 또는 사용 방법을 알아야 할 작업을 수행하십시오.

0

int 값이 NaN (숫자가 아님)입니다. -1로 설정하여 첫 번째 루프를 입력하십시오. 두 번째 루프에서 sc가 입력을 검색하지 않았으므로 초기화 만됩니다.

관련 문제