gpt4 book ai didi

java - 如何检查输入是否为数字,如果不是,则要求输入一个?

转载 作者:行者123 更新时间:2023-12-01 12:07:04 26 4
gpt4 key购买 nike

编辑:到目前为止,所有答案都不起作用。我得到的最接近的(谢谢你,TNT)正在使用:

while (true) {
try {
value = s.nextDouble();
break;
} catch (java.util.InputMismatchException ex) {
System.out.println("That is not a number! Please enter a numerical value.");
}
}

但是如果用户输入类似“foo”的内容,它会让我陷入无限循环,提示“这不是数字!请输入一个数值。”

我的程序要求选择一个单位(fl.oz、gal、oz、lb、in、ft 或 mi),询问他们有多少,并询问他们希望转换成的单位(mL、l、g、kg、mm、cm、m 或 km)。

我的程序有效,拒绝从愚蠢的转换(例如 gal 到 cm)进行转换,如果输入了 fl.oz、gal 等以外的任何内容,则告诉您重新输入。

我唯一无法弄清楚的是,当程序提示用户他们拥有多少单位时,用户是否输入了类似“foo”的内容。我的目标是让程序说类似“这不是数字!请输入一个数值。”如果我当前运行该程序并输入除数值以外的任何内容,我会在控制台中收到错误。我很确定会涉及到循环,并且我已经查找了用于解析的 API 文档,但我仍然陷入困境。

这是我的程序(很长,抱歉!):

import java.util.Scanner;

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

Scanner s = new Scanner(System.in);

System.out.println("What kind of unit do you have? Choose from: fl.oz, gal, oz, lb, in, ft, or mi. ");
String startingVariable = s.next();

while (!startingVariable.equals("fl.oz") && !startingVariable.equals("gal") && !startingVariable.equals("oz")
&& !startingVariable.equals("lb") && !startingVariable.equals("in") && !startingVariable.equals("ft") &&
!startingVariable.equals("mi")) {
System.out.println("That is not what I asked. Please choose from: fl.oz, gal, oz, lb, in, ft, or mi. ");
startingVariable = s.next();
}

System.out.println("How much of it do you have? ");
double value = s.nextDouble();
//here, I don't know what to put!

System.out.println("What would you like to convert to? Choose from: mL, l, g, kg, mm, cm, m, or km ");
String convertedVariable = s.next();

while (!convertedVariable.equals("mL") && !convertedVariable.equals("l") && !convertedVariable.equals("g")
&& !convertedVariable.equals("kg") && !convertedVariable.equals("mm") && !convertedVariable.equals("cm") &&
!convertedVariable.equals("m") && !convertedVariable.equals("km")) {
System.out.println("That is not what I asked. Please choose from: mL, l, g, kg, mm, cm, m, or km. ");
convertedVariable = s.next();
}

double result = 0;



if (startingVariable.equals("fl.oz")) {
if (convertedVariable.equals("mL")) {
result = (29.5735 * value);
} else if (convertedVariable.equals("l")) {
result = (0.0295735 * value);
} else if (convertedVariable.equals("g")) {
result = 0;
} else if (convertedVariable.equals("kg")) {
result = 0;
} else if (convertedVariable.equals("mm")) {
result = 0;
} else if (convertedVariable.equals("cm")) {
result = 0;
} else if (convertedVariable.equals("m")) {
result = 0;
} else if (convertedVariable.equals("km")) {
result = 0;
}
if (result == 0) {
System.out.println("You cannot convert from " + startingVariable + " to " + convertedVariable + ".");
System.out.println("]:");
}
}

if (startingVariable.equals("gal")) {
if (convertedVariable.equals("mL")) {
result = (3785.41 * value);
} else if (convertedVariable.equals("l")) {
result = (3.78541 * value);
} else if (convertedVariable.equals("g")) {
result = 0;
} else if (convertedVariable.equals("kg")) {
result = 0;
} else if (convertedVariable.equals("mm")) {
result = 0;
} else if (convertedVariable.equals("cm")) {
result = 0;
} else if (convertedVariable.equals("m")) {
result = 0;
} else if (convertedVariable.equals("km")) {
result = 0;
}
}

if (startingVariable.equals("oz")) {
if (convertedVariable.equals("mL")) {
result = (29.5735 * value);
} else if (convertedVariable.equals("l")) {
result = (0.0295735 * value);
} else if (convertedVariable.equals("g")) {
result = (28.3495 * value);
} else if (convertedVariable.equals("kg")) {
result = (0.0283495 * value);
} else if (convertedVariable.equals("mm")) {
result = 0;
} else if (convertedVariable.equals("cm")) {
result = 0;
} else if (convertedVariable.equals("m")) {
result = 0;
} else if (convertedVariable.equals("km")) {
result = 0;
}
}

if (startingVariable.equals("lb")) {
if (convertedVariable.equals("mL")) {
result = 0;
} else if (convertedVariable.equals("l")) {
result = 0;
} else if (convertedVariable.equals("g")) {
result = (453.592 * value);
} else if (convertedVariable.equals("kg")) {
result = (0.453592 * value);
} else if (convertedVariable.equals("mm")) {
result = 0;
} else if (convertedVariable.equals("cm")) {
result = 0;
} else if (convertedVariable.equals("m")) {
result = 0;
} else if (convertedVariable.equals("km")) {
result = 0;
}
}

if (startingVariable.equals("in")) {
if (convertedVariable.equals("mL")) {
result = 0;
} else if (convertedVariable.equals("l")) {
result = 0;
} else if (convertedVariable.equals("g")) {
result = 0;
} else if (convertedVariable.equals("kg")) {
result = 0;
} else if (convertedVariable.equals("mm")) {
result = (25.4 * value);
} else if (convertedVariable.equals("cm")) {
result = (2.54 * value);
} else if (convertedVariable.equals("m")) {
result = (0.0254 * value);
} else if (convertedVariable.equals("km")) {
result = (0.000025400 * value);
}
}

if (startingVariable.equals("ft")) {
if (convertedVariable.equals("mL")) {
result = 0;
} else if (convertedVariable.equals("l")) {
result = 0;
} else if (convertedVariable.equals("g")) {
result = 0;
} else if (convertedVariable.equals("kg")) {
result = 0;
} else if (convertedVariable.equals("mm")) {
result = (304.8 * value);
} else if (convertedVariable.equals("cm")) {
result = (30.48 * value);
} else if (convertedVariable.equals("m")) {
result = (0.30481 * value);
} else if (convertedVariable.equals("km")) {
result = (0.0003048 * value);
}
}

if (startingVariable.equals("mi")) {
if (convertedVariable.equals("mL")) {
result = 0;
} else if (convertedVariable.equals("l")) {
result = 0;
} else if (convertedVariable.equals("g")) {
result = 0;
} else if (convertedVariable.equals("kg")) {
result = 0;
} else if (convertedVariable.equals("mm")) {
result = (1609344 * value);
} else if (convertedVariable.equals("cm")) {
result = (160934 * value);
} else if (convertedVariable.equals("m")) {
result = (1609.34 * value);
} else if (convertedVariable.equals("km")) {
result = (1.60934 * value);
}
}

if (result == 0) {
System.out.println("You cannot convert from " + startingVariable + " to " + convertedVariable + ". Sorry dude.");
System.out.println("]:");
} else {
System.out.println("░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░");
System.out.printf(value + " " + startingVariable + " = %.3f " + convertedVariable + ".\n", result);
System.out.println("░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░");
}
if (result > 10000) {
System.out.println("That's a lot of " + convertedVariable +"!");
}
}
}

最佳答案

对于这种情况,您可以使用 while 循环和 try-catch。只要输入了 double 以外的内容,就会抛出 InputMismatchException,因此除非用户输入,否则永远不会到达 break 语句一个数字。

double value;
while (true) {
try {
value = s.nextDouble();
break;
} catch (java.util.InputMismatchException ex) {
System.out.println("That is not a number! Please enter a numerical value.");
s.nextLine();
}
}
s.nextLine();

之前之所以陷入无限循环,是因为在用户没有输入数字的情况下,扫描仪继续尝试解析无效输入。该字符串不断导致抛出 InputMismatchException,这解释了无限循环。添加 s.nextLine() 会消耗无效输入并防止这种情况发生。如果用户确实输入了数字,s.nextLine() 语句将使用该输入,以便提示用户输入下一个字符串。

关于java - 如何检查输入是否为数字,如果不是,则要求输入一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com