while循环只执行一次

时间:2013-08-10 15:44:52

标签: java while-loop

我很难弄清楚为什么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 个答案:

答案 0 :(得分:1)

问题在于,当您拨打nextDouble()时,它会消耗该号码,但不会使用号码后面的换行符。要解决此问题,请在调用inp.nextLine();之后添加一行代码nextDouble()


示例和完整说明:

假设输入“km”,按enter键,“123”,按回车键。然后从程序的角度来看,输入流是"km\n123\n"

代码String convert = inp.nextLine();获取值"km",并使输入超过第一个"\n"

代码double num = inp.nextDouble();获取字符串"123"并返回值(double)123.0。它在看到'\n'时停止解析,但它不消耗该字符 - 它仍保留在输入缓冲区中。

在循环的下一次迭代中,inp.nextLine();立即看到"\n",所以String convert = "";。这会触发循环中的else大小写,因此它会退出循环。

答案 1 :(得分:1)

如果两个条件中的任何一个:

(convert.equalsIgnoreCase("km"))

(convert.equalsIgnoreCase("m"))

...不是true,您将boolean continue1设置为false,这会在下一次迭代时中断您的循环。

请注意,因为它是一个布尔值,你可以(而且应该)写下你的while语句:

while (continue1) {
  // etc.
}

另请注意,在扫描特定类型时,您应该尝试/ catch Exception,例如Scanner.nextDouble,因为如果输入是意外类型,这可能会很好地破坏代码堆栈跟踪。

答案 2 :(得分:1)

您的代码在while循环中初始化扫描程序对象时仍然存在一个问题,它将解决您打印行2次的问题。使用此

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;
        }

    }
}
}

请检查一下 这是您在评论中写的问题的答案

答案 3 :(得分:0)

使用

String convert = inp.next();

而不是

String convert = inp.nextLine();
由于System.out.println(),

nextLine()正在读取空行。