Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用扫描仪读取浮点时发生Eclipse错误_Java_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪读取浮点时发生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.

作为培训练习的一部分,我正在编写一个模拟自动售货机的项目,当我接受浮点值时,Eclipse会抛出以下错误:

此代码块中出现了相关错误:

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。我还在想为什么会这样。还有一个问题吗?可能是不同的编译器设置。不管怎样,我都会尽量避免自动装箱。