2017-02-02 5 views
-3

のpublic static無効メイン(文字列[] args){Whileループ - JAVA

Scanner input = new Scanner(System.in); 

    double startingMile; 
    System.out.print("Enter the starting mile: "); 
    startingMile = input.nextDouble(); 
    double endingMile; 
    System.out.print("Enter the ending mile: "); 
    endingMile = input.nextDouble(); 
    System.out.println(""); 

    double countOne; 
    countOne = startingMile; 
    while (countOne <= endingMile) { 
     endingMile = countOne * 1.609; 
     System.out.println("miles: " + countOne + "," + " Kilometers: " + endingMile); 
     countOne++; 
    } 

これは私の出力がどのように見えるかですが、それは私の出力のための無限ループを与え続けています。私が間違っていることは何か考えていますか?事前のおかげで

Enter the starting mile: 2 
Enter the ending mile: 4 

miles: 2, kilometers: 3.218 
miles: 3, kilometers: 4.827 
miles: 4, kilometers: 6.436 
+5

ループ内で何をしているのか考えてみましょう。 while条件が**決して** falseになるような方法で、** endingMileとcountOneの両方を増やしています。 –

+0

@Hovercraft nvm私の言葉を正しく笑っていません^ – CabDude

+1

停止するチャンスは0%です。endingMileの乗数は1.609、countOneのインクリメントは1だけです – jace

答えて

2

これは実際に達成したいと思うものだと思います。

開始マイルから+1マイルに達するまでは、マイルをkmに変換する必要があります。コメントは@Ochiのおかげで、直接ステートメントではありません:D。まだクレジットを共有:)。

public static void main(String[] args) { 

Scanner input = new Scanner(System.in); 

double startingMile; 
System.out.print("Enter the starting mile: "); 
startingMile = input.nextDouble(); 
double endingMile; 
System.out.print("Enter the ending mile: "); 
endingMile = input.nextDouble(); 
System.out.println(""); 

double convertedKM; 
while (startingMile <= endingMile) { 
    convertedKM = startingMile * 1.609; 
    System.out.println("miles: " + startingMile + "," + " Kilometers: " + convertedKM); 
    startingMile++; 
} 
+0

クレジットのおかげで、点(あなたの答え、あなたのポイント;))を持ってうれしい – ochi

+0

それはdo-whileループだったらどうすればいいでしょうか? –

+0

とdo whileとwhileの出力は同じであるため、問題はありません。 do-whileを除いて、あなたのプログラムは比較の前にまず作業を行います:) while文では、まず「do this work」の前に比較します – jace

0

whileループ内の条件はは、すべての変数の現在の値を使用して、あなたがループを通過するたびに評価されます。あなたはこの

while (countOne <= endingMile) { 

は、最初の反復の前endingMileの値を見て、ループの上限としてそれを使用するだろうと思ったかもしれません。代わりに、毎回endingMileの値を調べます。ループ内でendingMileを変更すると、その都度、新しい値を使用して比較が行われます。

これを修正するには、別の変数を設定して、endingMileを変更する必要はありません。