2016-10-08 6 views
1

그래서 변수를 입력하라는 메시지가 나타납니다. 변수가 0보다 작고 10보다 큰 경우 사용자가 < 0과> 10을 입력하면 사용자가 다시 번호를 입력하도록 요청합니다. 나는 네가 잘못 입력했다고 말하면서 시간을 물을 때 4를 입력한다. 그러나 두 번째 시도에서 잘 작동합니다. 예 : 25를 입력하면 "잘못 입력했습니다."라는 메시지가 인쇄됩니다. 이 메시지를 입력 한 내용이 첫 번째 시도에서 적절한 상태 인 이유는 무엇입니까?do-while 오류 받기

import java.util.*; 
import java.io.*; 


public class abc{ 
public static void main(String args[]) throws Exception{ 


    int velocity; 
    int time; 

    System.out.print("Enter the velocity"); 

    Scanner sn = new Scanner(System.in); 

    velocity = sn.nextInt(); 


    System.out.println("Enter the time"); 

    time=sn.nextInt(); 


    do{ 

     System.out.println("you entered wrong format/d Please Try Again"); 

     time=sn.nextInt(); 

    }while(time<0 || time>10); 

} 
} 
+1

할-그런데 항상 한 번에 상관없이 실행할 수 없습니다. – Li357

+1

그것을 사용해야합니다. 조언 있니? –

+0

왜 일할 필요가 있습니까? 이 경우에는 최적이 아닙니다. 잠시 사용하십시오. – Li357

답변

1

다음 구현을 고려하십시오 (설명 참조).

할-while 루프

// Assuming the time value is not valid. 
boolean isValidTime = false; 

do { 
    System.out.println("Enter the time: "); 
    time = sn.nextInt(); 

    if (time < 0 || time > 10) { 
     System.out.println("You have entered invalid time value!"); 
    } else { 
     // The time value is valid now! 
     isValidTime = true; 
    } 
// While the time value is not valid… 
} while (!isValidTime); 

동안-할 루프를

// Assuming the time value is not valid. 
boolean isValidTime = false; 

// While the time value is not valid… 
while (!isValidTime) { 
    System.out.println("Enter the time: "); 
    time = sn.nextInt(); 

    if (time < 0 || time > 10) { 
     System.out.println("You have entered invalid time value!"); 
    } else { 
     // The time value is valid now! 
     isValidTime = true; 
    } 
} 
+1

저자는 코멘트에서 do-while 루프를 사용해야한다고 말했다. "나는 그것을 사용해야한다. 당신은 어떤 충고를 가지고 있니?" – dshus

+0

@ dshus, 메모 주셔서 대단히 감사합니다! 답변을 업데이트했습니다. –

1

do while 루프는 항상 do {} 블록을 실행합니다. 첫 번째 숫자를 입력하면 먼저 do {}를 실행하여 메시지를 인쇄합니다. 두 번째 시간에 while() 블록에서 실제로 검사하여 예상되는 메시지를 얻습니다.

이 "시간을 입력합니다"인쇄
+0

"do while"루프가 필요한 경우 플래그를 만들고 counter = 0을 초기화하면됩니다. system.out.println을 실행하기 전에 flag가 0이 아닌지 검사하고, flag가 0이면 명령문을 출력한다. 이런 식으로 카운터를 늘려야 할 것입니다. 플래그 = 0; do { if (flag! = 0) { System.out.println ("잘못 입력했습니다./다시 시도하십시오"); } 플래그 = 1; time = sn.nextInt(); } while (시간 <0 || time>10); – HaroldSer

+0

나는 counter = 0이 아닌 flag = 0을 초기화하려고했다. 또한 "이 같은 깃발을 높이십시오"라고 말하면 카운터가 아닙니다. – HaroldSer

1
do{ 
    System.out.println("Enter the time"); 
    time=sn.nextInt(); 
    if (time < 0 || time > 10) 
     System.out.println("you entered wrong format/d Please Try Again"); 


}while(time<0 || time>10); 

는 입력을 기다립니다, 그리고 입력이 잘못되면, 루프 잘못된 형식의 메시지를 출력하고 다시 시간을 묻는 메시지를 인쇄합니다.

do-while은 항상 적어도 한 번 이상 명령문을 실행하기 때문입니다. 그래서 당신이하는 일은 정수를 얻고 유효한지 검사하고, 유효하지 않으면 루프를 반복하여 "잘못된 형식"메시지를 출력합니다. 그렇지 않으면 "잘못된 형식"메시지를 인쇄하지 않고 계속됩니다.

"시간 입력"을 한 번만 인쇄하려면 먼저 해당 문구를 이동하십시오.