Java 使用扫描仪读取浮点时发生Eclipse错误
作为培训练习的一部分,我正在编写一个模拟自动售货机的项目,当我接受浮点值时,Eclipse会抛出以下错误: 此代码块中出现了相关错误:Java 使用扫描仪读取浮点时发生Eclipse错误,java,java.util.scanner,Java,Java.util.scanner,作为培训练习的一部分,我正在编写一个模拟自动售货机的项目,当我接受浮点值时,Eclipse会抛出以下错误: 此代码块中出现了相关错误: public void Restock() { boolean done = false; Float price; String quit, name; Scanner scan = new Scanner(System.in); scan.
public void Restock() {
boolean done = false;
Float price;
String quit, name;
Scanner scan = new Scanner(System.in);
scan.useLocale(Locale.US);
scan.useDelimiter("\\n");
while (!done) {
System.out.println("Enter Item Name: ");
name = scan.next();
System.out.println("Enter Price (XX.XX): $");
price = scan.nextFloat();
item = new Items(name, price);
stock.add(item);
System.out.println("Quit? (Y/N): ");
quit = scan.next();
while (!quit.equalsIgnoreCase("y") && !quit.equalsIgnoreCase("n")) {
System.out.println("Invalid Entry. Quit? (Y/N): ");
quit = scan.next();
}
if (quit.equalsIgnoreCase("y")) {
done = true;
} else if (quit.equalsIgnoreCase("n")) {
done = false;
}
}
scan.close();
}
我尝试在不使用分隔符的情况下运行代码,添加了一个额外的“scan.nextLine();”上面的语句'price=scan.nextFloat();'在这种情况下,在第二次通过循环时,它跳过了询问名称,直接进入了价格。有人能帮我解决这个问题吗?当你的问题跳过了很多关于类和其他一切如何工作的信息时,你的错误的一个可能来源是你正在使用一个
Float
来存储你的值,但是使用nextFloat()
来获取你的值,它返回一个Float
。这不应该是个问题,但你永远不知道。无论如何,在这种情况下,您可能会尝试一种解决方案(这对我来说总是有效的),那就是将scan.nextFloat()
替换为Float.valueOf(scan.next())
,这样您就不必依赖挑剔的自动装箱了。您的问题没有提供太多信息。但是,下面是我重新创建代码的最快尝试:
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Locale;
import java.util.Scanner;
public class RestockDemo {
public ArrayList<Items> stock = new ArrayList<Items>();
public static void main(String[] args) {
RestockDemo restockDemo = new RestockDemo();
restockDemo.restock();
}
public void restock() {
boolean done = false;
float price;
String quit, name;
Scanner scan = new Scanner(System.in);
scan.useLocale(Locale.US);
scan.useDelimiter("\\n");
while (!done) {
System.out.print("Enter Item Name: ");
name = scan.next();
System.out.print("Enter Price (XX.XX): $");
price = scan.nextFloat();
Items item = new Items(name, price);
stock.add(item);
System.out.println(stock.get(0).name);
System.out.println(stock.get(0).price);
System.out.print("Quit? (Y/N): ");
quit = scan.next();
while (!quit.equalsIgnoreCase("y") && !quit.equalsIgnoreCase("n")) {
System.out.print("Invalid Entry. Quit? (Y/N): ");
quit = scan.next();
}
if (quit.equalsIgnoreCase("y")) {
done = true;
} else if (quit.equalsIgnoreCase("n")) {
done = false;
}
}
scan.close();
}
class Items {
public String name;
public double price;
Items(String name, double price) {
this.name = name;
this.price = price;
}
}
}
Eclipse:
run:
Enter Item Name: Lilly Pulitzer Pearl Romper
Enter Price (XX.XX): $198.88
Lilly Pulitzer Pearl Romper
198.8800048828125
Quit? (Y/N): y
BUILD SUCCESSFUL (total time: 8 minutes 0 seconds)
Enter Item Name: Lilly Pulitzer Pearl Romper
Enter Price (XX.XX): $198.89
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextFloat(Unknown Source)
at RestockDemo.restock(RestockDemo.java:26)
at RestockDemo.main(RestockDemo.java:11)
坦率地说,我很惊讶地发现,两种不同的开发环境会产生不一致的结果,我很想找出原因。我假设它与新行分隔符有关,但我不确定。能否告诉我们您遇到了什么错误。这很有效,谢谢!接下来,我应该在问题中包含哪些信息?我不想包含与解决当前问题无关的代码或细节。@Lotus如果成功,那就太好了!请单击绿色的“勾选”标记对您有效的答案,以便其他人知道哪个答案解决了您的问题,如果他们发现自己是因为有类似的问题而来问您的问题的话。至于改进问题,一般来说,错误或预期输入/输出与实际输入/输出的堆栈跟踪是有帮助的,以及代码每个部分应该做什么的注释,或者自定义类/方法在涉及问题部分时应该做什么的描述/源代码。根据您发布的源代码,与OP使用的浮点类不同,您使用的是一个基本浮点类。有趣的是,无论我使用的是基本浮点类还是包装浮点类,我共享的结果都是相同的:在NetBeans中工作正常,在Eclipse中抛出InputMismatchException。我还在想为什么会这样。还有一个问题吗?可能是不同的编译器设置。不管怎样,我都会尽量避免自动装箱。