提问人:arivvid27 提问时间:8/10/2023 最后编辑:Diego Borbaarivvid27 更新时间:8/10/2023 访问量:49
我的扫描仪输入被跳过,代码被终止
My Scanner input gets skipped and code gets terminated
问:
我正在用 Java 编写一个“加仑到升,反之亦然”程序,但是一旦我完成了我的程序,我就第一次运行了它。我像预期的那样显示了系统输出,但随后它跳过了我程序的用户输入阶段。
import java.util.Scanner;
public class Main {
private static void intro(String[] args) {
final Scanner galOrLit = new Scanner(System.in);
System.out.println("[1] => Gallons to Liters");
System.out.println("[2] => Liters to Gallons");
if ("1".equals(galOrLit)) {
galToLit(args);
} else if ("2".equals(galOrLit)) {
litToGal(args);
}
}
private static void galToLit(String[] args) {
double liters;
System.out.println("Enter Gallons: ");
final Scanner gallons = new Scanner(System.in);
int input = gallons.nextInt();
liters = input * 3.7854;
System.out.println("\n" + input + " gallons is " + liters + " liters.");
}
private static void litToGal(String[] args) {
double gallons;
System.out.println("Enter Liters: ");
final Scanner liters = new Scanner(System.in);
int input = liters.nextInt();
gallons = input / 3.7854;
System.out.println("\n" + input + " liters is" + gallons + " gallons.");
}
public static void main(String[] args) {
intro(args);
}
}
在这篇文章之后,我试图最终确定我的扫描仪,因为我在一个班级中有多个。我期望我的代码能够顺利运行,但它对输出没有影响。这是我对两个版本的代码所了解的。
答:
0赞
Skerdi Velo
8/10/2023
#1
看起来您实际上并没有读取用户的任何输入。您只打印出可供选择的选项,但您没有阅读用户的输入。您只需添加一行:
String choice = scanner.nextLine();
它看起来像这样:
private static void intro(String[] args) {
final Scanner scanner = new Scanner(System.in);
System.out.println("[1] => Gallons to Liters");
System.out.println("[2] => Liters to Gallons");
String choice = scanner.nextLine();
if ("1".equals(choice)) {
galToLit(args);
} else if ("2".equals(choice)) {
litToGal(args);
}
}
另一件事,我建议不要使用nextLine(),而是使用:Integer.parseInt(scanner.nextLine());
所以那行看起来像这样:
String choice = Integer.parseInt(scanner.nextLine());
Double.parseDouble(scanner.nextLine()); 如果你有任何双精度因为如果你从字符串输入到 int,有时它不起作用。
希望这有帮助!
评论
2赞
OneCricketeer
8/10/2023
选项是 1 和 2...为什么使用double?
0赞
Skerdi Velo
8/10/2023
你不明白。我没有使用 double,这是对未来编码不使用 nexLine() 的建议
2赞
Federico klez Culloca
8/10/2023
@SkerdiVelo好吧,但为什么呢? 是整数的正确类型。int
0赞
Skerdi Velo
8/10/2023
因为当你有的时候,比如说名字和年龄。你做 input.nextLine() 作为名称,它将存储名称,但会跳过年龄。因此,要解决此问题,请使用我的建议
0赞
Skerdi Velo
8/10/2023
我没有说使用双倍作为选择。他说他是 Java 的新手,所以我试图帮助他将来编码。
0赞
Diego Borba
8/10/2023
#2
问题在于您使用类来读取用户输入。以下是程序的更正版本:Scanner
import java.util.Scanner;
public class Main {
private static void intro(String[] args) {
final Scanner galOrLit = new Scanner(System.in);
System.out.println("[1] => Gallons to Liters");
System.out.println("[2] => Liters to Gallons");
int choice = galOrLit.nextInt(); // Read user's choice
if (choice == 1) {
galToLit(args);
} else if (choice == 2) {
litToGal(args);
}
}
private static void galToLit(String[] args) {
double liters;
System.out.println("Enter Gallons: ");
final Scanner gallons = new Scanner(System.in);
double input = gallons.nextDouble(); // Read a double value
liters = input * 3.7854;
System.out.println("\n" + input + " gallons is " + liters + " liters.");
}
private static void litToGal(String[] args) {
double gallons;
System.out.println("Enter Liters: ");
final Scanner liters = new Scanner(System.in);
double input = liters.nextDouble(); // Read a double value
gallons = input / 3.7854;
System.out.println("\n" + input + " liters is " + gallons + " gallons.");
}
public static void main(String[] args) {
intro(args);
}
}
在此更正版本中,我进行了以下更改:
- 用于读取用户选择的转换。
nextInt()
- 用于读取用户输入的加仑或升。
nextDouble()
- 更新了方法中的条件,以正确比较用户的选择。
intro
- 将输入变量类型更改为 in and 方法以容纳双精度值。
double
galToLit
litToGal
这样,它现在可以正确读取用户输入并执行所需的转换。
评论
"1".equals(galOrLit)
,您正在将对象本身与字符串进行比较。那永远不会.相反,您必须从扫描仪中读取一些东西,例如 or 并将其与字符串或(或实际数字)进行比较。Scanner
"1"
true
nextLine()
nextInt()
"1"
"2"
int
hasNext()
nextInt()