0

while ループが実際にループしない理由を理解するのに苦労しています。一度通り抜けて止まります。

import java.util.*;

public class mileskm {
    public static void main(String[] args) {

        Scanner inp = new Scanner(System.in);
        boolean continue1 = true;

        while (continue1 == true) {

            System.out.println("Would you like to convert m-km or km-m(km for m-km and m for km-m)");

            String convert = inp.nextLine();
            if (convert.equalsIgnoreCase("km")) {
                System.out.println("Enter the mileage to be converted.");
                double num = inp.nextDouble();
                double con = num * 1.60934;
                System.out.println(con);
                continue1 = true;
            } else if (convert.equalsIgnoreCase("m")) {
                System.out.println("Enter the km to be converted.");
                double num = inp.nextDouble();
                double con = num * 0.621371;
                System.out.println(con);
                continue1 = true;
            } else {
                continue1 = false;
            }

        }
    }
}

ユーザーが単位を複数回変換できるように、ループさせようとしています。どんな助けでも大歓迎です!

4

4 に答える 4

1

There is still one problem in your code intialize your scanner object in your while loop, it will resolve your problem of printing the line 2 times. Use This

import java.util.*;

public class mileskm {
public static void main(String[] args) {

    Scanner inp;
    boolean continue1 = true;

    while (continue1) {

        System.out.println("Would you like to convert m-km or km-m(km for m-km and m for km-m)");
       inp = new Scanner(System.in);

        String convert = inp.nextLine();
        if (convert.equalsIgnoreCase("km")) {
            System.out.println("Enter the mileage to be converted.");
            double num = inp.nextDouble();
            double con = num * 1.60934;
            System.out.println(con);
            continue1 = true;
        } else if (convert.equalsIgnoreCase("m")) {
            System.out.println("Enter the km to be converted.");
            double num = inp.nextDouble();
            double con = num * 0.621371;
            System.out.println(con);
            continue1 = true;
        } else {
            break;
        }

    }
}
}

Kindly Check It This Is the answer of your question written in comments

于 2013-08-10T16:26:47.990 に答える
1

問題は、 を呼び出すとnextDouble()、数字は消費されますが、数字の後に続く改行は消費されないことです。これを修正するには、inp.nextLine();を呼び出した後にコード行を追加するだけnextDouble()です。


例と完全な説明:

「km」と入力し、Enter キーを押し、「123」と入力し、Enter キーを押します。次に、プログラムの観点から、入力ストリームは"km\n123\n".

コードString convert = inp.nextLine();は値"km"を取得し、最初の を超えて入力を進めます"\n"

コードdouble num = inp.nextDouble();は文字列を取得し"123"、値 (double)123.0 を返します。が表示されると解析を停止しますが'\n'、文字は消費されず、入力バッファーに残ります。

ループの次の反復では、がすぐにinp.nextLine();見えるので、 . これにより、ループ内でケースがトリガーされるため、ループを終了します。"\n"String convert = "";else

于 2013-08-10T15:52:34.333 に答える
1

2 つの条件のいずれかに該当する場合:

(convert.equalsIgnoreCase("km"))

また

(convert.equalsIgnoreCase("m"))

... ではない場合、次の反復でループを中断するように設定しtrueます。boolean continue1false

whileまた、これはブール値であるため、次のようにステートメントを書くことができます (またそうすべきです) ことにも注意してください。

while (continue1) {
  // etc.
}

入力が予期しないタイプの場合、スタック トレースでコードが壊れる可能性があるExceptionため、特定のタイプをスキャンするときに s を try/catch する必要があることにも注意してください。Scanner.nextDouble

于 2013-08-10T15:54:04.103 に答える
0

使用する

String convert = inp.next();

それ以外の

String convert = inp.nextLine();

System.out.println() のため、nextLine() は空行を読み取っています。

于 2013-08-10T16:02:19.100 に答える