while循环只执行一次
我很难搞清楚为什么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; } } } }
我试图让它循环,以便用户可以多次转换单位。 欢迎任何和所有帮助!
问题是当你调用nextDouble()
,它会消耗数字而不是数字后面的换行符。 要解决这个问题,只需在inp.nextLine();
输入一行代码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
情况,因此它会退出循环。
如果两个条件中的任何一个:
(convert.equalsIgnoreCase("km"))
要么
(convert.equalsIgnoreCase("m"))
…不是true
,你将boolean
continue1
设置为false
,这将在下一次迭代时破坏你的循环。
还请注意,因为它是一个布尔值,你可以(并且应该)编写你的while
语句:
while (continue1) { // etc. }
另请注意,在扫描特定类型(例如Scanner.nextDouble
,应该尝试使用/ catch for Exception
,因为如果输入是意外类型,这可能会很好地破坏代码堆栈跟踪。
您的代码在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; } } } }
请检查这是您在评论中写的问题的答案
使用
String convert = inp.next();
代替
String convert = inp.nextLine();
由于System.out.println(),nextLine()正在读取空行。