Java 而循环只执行一次
我很难弄明白为什么while循环实际上不会循环。它运行一次并停止Java 而循环只执行一次,java,while-loop,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) {
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()调用nextDouble()
后的code>
示例和完整解释:
假设输入“km”,按回车键,“123”,按回车键。然后从程序的角度来看,输入流是“km\n123\n”
代码String convert=inp.nextLine()
获取值“km”
,并将输入向前推进超过第一个“\n”
代码double num=inp.nextDouble()
获取字符串“123”
,并返回值(双精度)123.0。当它看到'\n'
时,它停止解析,但它不使用该字符-它保留在输入缓冲区中
在循环的下一次迭代中,inp.nextLine()
立即看到“\n”
,因此字符串convert=”“代码>。这将触发循环中的else
大小写,因此它将退出循环。问题是,当您调用nextDouble()
时,它将使用数字,但不会使用数字后面的换行符。要解决这个问题,只需放置一行代码inp.nextLine()调用nextDouble()
后的code>
示例和完整解释:
假设输入“km”,按回车键,“123”,按回车键。然后从程序的角度来看,输入流是“km\n123\n”
代码String convert=inp.nextLine()
获取值“km”
,并将输入向前推进超过第一个“\n”
代码double num=inp.nextDouble()
获取字符串“123”
,并返回值(双精度)123.0。当它看到'\n'
时,它停止解析,但它不使用该字符-它保留在输入缓冲区中
在循环的下一次迭代中,inp.nextLine()
立即看到“\n”
,因此字符串convert=”“代码>。这将触发循环中的else
案例,因此它将退出循环。如果出现以下两种情况之一:
(convert.equalsIgnoreCase("km"))
或
。。。如果不是true
,则将布尔值设置为continue1
为false
,这将在下一次迭代时中断循环
还请注意,由于它是布尔值,因此您可以(也应该)编写while
语句:
while (continue1) {
// etc.
}
还请注意,在扫描特定类型时,您应该尝试/捕获异常
s,例如Scanner.nextDouble
,因为如果输入是意外类型,这很可能会使用堆栈跟踪中断代码 如果两种情况之一:
(convert.equalsIgnoreCase("km"))
或
。。。如果不是true
,则将布尔值设置为continue1
为false
,这将在下一次迭代时中断循环
还请注意,由于它是布尔值,因此您可以(也应该)编写while
语句:
while (continue1) {
// etc.
}
还请注意,在扫描特定类型时,您应该尝试/捕获异常
s,例如Scanner.nextDouble
,因为如果输入是意外类型,这很可能会使用堆栈跟踪中断代码 使用
String convert = inp.next();
而不是
String convert = inp.nextLine();
由于System.out.println()的原因,nextLine()正在读取空行。使用
String convert = inp.next();
而不是
String convert = inp.nextLine();
由于System.out.println(),nextLine()正在读取空行。代码中仍然存在一个问题初始化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;
}
}
}
}
请检查一下
这是您在注释中所写问题的答案。代码中仍然存在一个问题。在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;
}
}
}
}
请检查一下
这是你问题的答案,写在评论中我不明白如何处理最后一个问题{continue1=false}。。。因为如果它不是m或km,我希望它关闭。没关系。我明白了。现在我有另一个问题,这在我制作的任何程序中都经常发生。一旦它通过循环一次,行SYSTEM.out.println(“您想转换m-km还是km-m(km表示m-km,m表示km-m)”);然后在第二次跑步时打印两次,每次跑步后打印两次。是什么让它在第一个循环后每次打印两次?它不应该用那个代码在每个循环中打印两次。。。当然,一旦循环迭代,它将重新打印(一次)。我不知道如何处理最后一个else{continue1=false}。。。因为如果它不是m或km,我希望它关闭。没关系。我明白了。现在我有另一个问题,这在我制作的任何程序中都经常发生。一旦它通过循环一次,行SYSTEM.out.println(“您想转换m-km还是km-m(km表示m-km,m表示km-m)”);然后在第二次跑步时打印两次,每次跑步后打印两次。是什么让它在第一个循环后每次打印两次?它不应该用那个代码在每个循环中打印两次。。。当然,一旦循环迭代,它将重新打印(一次)。