编辑:到目前为止,答案都没有。我最接近的(谢谢你,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"当程序提示用户他们有多少单位时。我的目标是让程序说出像#34;这不是一个数字!请输入数值。"如果我当前运行程序并输入除数值之外的任何内容,我在控制台中会出现错误。我很确定会涉及到循环,我已经查找了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 +"!");
}
}
}
答案 0 :(得分:1)
您可以使用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()
语句将使用输入,因此将提示用户输入下一个字符串。
答案 1 :(得分:0)
我假设错误与转换错误一致?您需要在try块中捕获异常,然后您可以提醒用户并获得另一个输入。
答案 2 :(得分:0)
你需要抓住例外:
try
{
double value = s.nextDouble();
}
catch(InputMismatchException exception)
{
System.out.println("This is not a number");
}
答案 3 :(得分:0)
使用try catch来处理这种情况。
当用户输入非数字时,它会抛出异常,然后捕获它,然后从catch块执行任何你想要的东西。
try{
System.out.println("How much of it do you have? ");
double value = s.nextDouble();
}catch(InputMismatchException ime){
System.out.println("This is not a number");
}
public class InputMismatchException扩展NoSuchElementException
由扫描程序抛出,表示检索到的令牌没有 匹配预期类型的模式,或者令牌不在 预期类型的范围。
答案 4 :(得分:0)
"但是如果用户输入类似" foo"的东西,它会让我进入无限循环说"那不是数字!请输入数值。""
它没有"让你进入无限循环",它只是一直询问,直到你输入一个数字,就像你在原始问题中提到的那样。你还想做什么呢?