2016-10-08 10 views
1

したがって、ユーザーから変数を入力するように求められます。変数が0より小さく、10より大きい場合ユーザーが< 0と> 10のいずれかを入力すると、ユーザーに再度番号を入力するように求めます。私は時間を尋ねるときに4と入力し、あなたが間違って入力したと言います。しかし、2度目の試みではうまくいく。例: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

を行う-whilesいつもどんな一度実行しません。 – Li357

+1

私はそれを使用する必要があります。アドバイスはありますか? –

+0

なぜあなたはdo-whileを必要としますか?この場合は最適ではありません。しばらく使用してください。 – Li357

答えて

1

次の実装を考慮してください(コメントを参照)。

がdo-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); 

ながら-doループ

// 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 {}が最初に実行されるので、メッセージが出力されます。 2度目のwhile()ブロックでは、実際にそれがチェックされているので、期待されるメッセージが得られます。

+0

"do while"ループを実行する必要がある場合は、フラグを作成してcounter = 0を初期化するだけで済みます。 system.out.printlnを実行する前に、フラグが0でないかどうかをチェックし、フラグが0でない場合は、その文を印刷します。このようにカウンターを増やす必要があります。フラグ= 0; { if(flag!= 0){ System.out.println( "間違った形式を入力しました/ dもう一度お試しください)"; }フラグ= 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が常に少なくとも1回ステートメントを実行するためです。だから、あなたがするのは整数を取得し、それが有効であるかどうかをチェックし、無効であればループして、 "間違ったフォーマット"のメッセージを出力します。それ以外の場合は、「間違ったフォーマット」メッセージを印刷しないで続行します。

「時間を入力してください」を1回だけ印刷したい場合は、その前にその文を移動してください。