在我的函数中获取NoSuchElementException

问题描述 投票:0回答:1

我试图弄清楚为什么我在函数上得到NoSuchElementException

我有一个产品列表,这就是我购买产品的方式:

    void buyProdcut(String id) throws Exception{
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < products.size() ; i++) {
            if (products.get(i).getProdID().equals(id)) {
                int prodQuantity = products.get(i).getQuantity();
                System.out.println("Enter the quantity you want to buy:");
                int quantityToBuy = sc.nextInt();
                if (products.get(i).getQuantity() - quantityToBuy < 0) {
                    System.out.println("Sorry, there are only " + prodQuantity + " items left in stock, you can't buy " + quantityToBuy);
                }
                else{
                System.out.println("Thanks for buying " + products.get(i).createOutput());
                prodQuantity = prodQuantity - quantityToBuy;
                sc.close();
                }
                return;
            }
        }
        System.out.println("No such product");
        sc.close();
        return;
    }

我从控制台菜单中调用该方法:

                case 2:
                    st.printArray(PRODCUTS_LIST);
                    try {
                        System.out.println("Enter the ID number of the prodcut you'd like to buy:");
                        String prodToBuyId = sc.nextLine();
                        st.buyProdcut(prodToBuyId);
                    } catch (NoSuchElementException e) {
                        System.out.println("No such prodcut");
                    }
                    break;

行为是我运行菜单,单击该选项以购买菜单(无论列表是否为空),然后我都收到错误提示。

完整错误是:

Insert selection: Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
        at Menu.customerSubMenu(Menu.java:84)
        at Menu.mainMenu(Menu.java:48)
        at Menu.employeeSubMenu(Menu.java:216)
        at Menu.mainMenu(Menu.java:50)
        at Menu.main(Menu.java:24)

尽管我怀疑它是否与此功能相关,但是有其他两件事可能与此相关联:

  1. 我有两个看起来像这样的菜单:

enter image description here

要返回每个菜单或子菜单,我正在调用该菜单的功能,它可能会删除从内存中添加的产品?

  1. 我也正在处理文件。我的数据加载和保存可能有问题...但是那很深,我不想无故粘贴大量代码,而是一步一步地找到问题,因为我已经在此处提供了可能。

任何帮助都将是巨大的:)

java
1个回答
0
投票

变量名称中存在拼写错误。这可能是导致错误的原因。

观察:

st.printArray(PRODCUTS_LIST);    --> spelling mistake in 'products'

建议的分辨率:

st.printArray(PRODUCTS_LIST);
© www.soinside.com 2019 - 2024. All rights reserved.