所以,我一直坚持这种方法,我正在努力。基本上,我需要接收输入的方法,检查它是否实际上是一个数字,然后看它是否在最大值和最小值之间。
我目前遇到的问题是当我要求用户输入新号码时,因为他们的输入是在0或大于1,000,000之前。当用户输入除数字以外的任何内容时,它会崩溃。有什么想法吗?
如果您决定告诉我如何使用Try / Catch语句修复它;你能告诉我它究竟是如何运作的吗?我不能100%确定这些是如何运作的!
代码已使用最新版本
进行了编辑public static double inRange( Scanner scan, int min, int max ) {
double Amount = 0.0;
boolean isValid = false;
while( isValid == false ) {
if( scan.hasNextDouble() ) {
Amount = scan.nextDouble();
if( Amount > max ) {
System.out.print( "Error: You cannot enter a number greater than $1,000,000. Try again: " );
}
else if( Amount < min ) {
System.out.print( "Error: You cannot enter a negative number. Try again: " );
}
else {
isValid = true;
break;
}
}
else {
System.out.print( "Error: You must enter a number! Try again: " );
scan.next();
}
}
return Amount;
}
答案 0 :(得分:0)
我认为错误存在于这些行中
if( scan.hasNextDouble() ) {
...
} else {
System.out.print( "Error: You must enter a number! Try again: " );
Amount = scan.nextDouble(); // problem is here, remove it!
}
如果扫描没有下一个双倍,它怎么能得到下一个双倍值?
此外,我认为这一行
Amount = scan.nextDouble();
应该改为
scan.next();
这些是我的代码,它们运行正常。
Scanner scan = new Scanner(System.in);
int min = 0;
int max = 1000000;
double Amount = 0.0;
boolean isValid = false;
while (isValid == false) {
if (scan.hasNextDouble()) {
Amount = scan.nextDouble();
if (Amount > max) {
System.out.print("Error: You cannot enter a number greater than $1,000,000. Try again: ");
}
else if (Amount < min) {
System.out.print("Error: You cannot enter a negative number. Try again: ");
}
else {
isValid = true;
}
}
else {
System.out.print("Error: You must enter a number! Try again: ");
scan.next();
}
}
答案 1 :(得分:0)
有很多方法可以解决这个问题以及一些改进代码的方法。
所以问题是Scanner返回一个字符串,并且你将该字符串赋值给double,当它类似于“23”或“2.4”但是不能与“Hello”一起使用时。 你做得很好,检查字符串是否在开头有一个双重
if( scan.hasNextDouble() )
但是你不检查在else
中是否有双重 else {
System.out.print( "Error: You must enter a number! Try again: " );
Amount = scan.nextDouble();
}
因此,如果用户输入String
之类的“Hello”,则表示扫描程序scan
没有double
,然后告诉用户但指定Amount
等于输入的下一个东西没有检查它是否是双倍的。因此,如果再次输入“Hello”,它将崩溃。但是,如果你删除该行,就像有人建议你会得到一个无限循环,因为如果你看hasNextDouble
scan.nextLine()
它会说“扫描仪不会超过任何输入。”这意味着它将继续检查您输入的相同内容,除非您移动扫描仪。所以你需要做一些事情来移动扫描仪像System.out.print( "Error: You must enter a number! " + scan.nextLine() +" is not a number. Try again: " );
那样返回刚输入的字符串,你可以使用它来给用户更多信息
Amount
因此,如果您输入“Hello”,它会告诉您Hello不是数字。
同样the documentation是变量的名称以小写字母开头,而不是amount
使用System.out.print( "Error: You cannot enter a number greater than $" + max + ". Try again: " );
。你也可以使你的代码更加模块化,因为现在尽管min和max是可以改变的变量,你总是告诉用户它们是1,000,000和0.所以如果我把max设为2然后输入3程序会告诉我
“错误:您输入的数字不能超过$ 1,000,000”
如果您将该行更改为
InputMismatchException
它会更有意义。
是的,您可以通过使用try catch捕获{{1}}来解决原始问题,但这个答案已经很长了,您可以阅读naming convention
答案 2 :(得分:0)
我最终解决了这个问题。我有一个'scan.next();'在调用我的inRange()方法的方法中。所以,一旦我删除它,我的问题请求输入两次解决,并且该方法成功检查它是否实际上是双。
public static double deposit(double bankAcc, String pinCode, Scanner scan ) {
boolean valid = false;
double depositAmount = 0;
System.out.print( "Please enter your PIN #: " );
String pinCodeTest = scan.nextLine();
while( valid == false ) {
if( pinCodeTest.equals(pinCode)) {
System.out.print( "How much would you like to deposit?: " );
depositAmount = inRange( scan, 0, 1000000 );
valid = true;
}
else {
System.out.println( "Error! Incorrect PIN #. Try again: " );
pinCodeTest = scan.nextLine();
}
// I had a 'scan.next();' right here... Thinking it acted as a buffer clear!
}
return depositAmount;
}
public static double inRange( Scanner scan, int min, int max ) {
double amount = 0.0;
boolean isValid = false;
while( isValid == false ) {
if( scan.hasNextDouble() ) {
amount = scan.nextDouble();
if( amount > max ) {
System.out.print( "Error: You cannot enter a number greater than $1,000,000. Try again: " );
}
else if( amount < min ) {
System.out.print( "Error: You cannot enter a negative number. Try again: " );
}
else {
isValid = true;
break;
}
}
else {
System.out.print( "Error: You must enter a number! Try again: " );
scan.next();
}
}
return amount;
}