如何在 Java 中使用 for 循环和扫描器添加数组

How to add arrays using a for loop and scanner in Java

我在使用块底部的 enterItemInfo() 方法时遇到问题。我希望用户输入商品名称和商品价格,然后循环等于 itemNames.length 的次数。我遇到的问题是,当我 运行 此方法时,它会以某种方式直接跳到第二个输入,然后给定的任何输入都会导致错误。不确定我哪里出错了。

import java.util.Scanner;

public class Item {
    //FIELDS
    private int itemAmount;
    private String[] itemNames;
    private double[] itemPrices;

    Scanner item = new Scanner(System.in);

    public int getItemAmount() {
        return this.itemAmount;
    }

    public void setItemAmount() {
        System.out.println("Please enter the number of items: ");
        this.itemAmount = item.nextInt();
        System.out.print("There are " + this.itemAmount + " items.");
    }

    public void enterItemInfo() {
        itemNames = new String[this.itemAmount];
        for (int i = 0; i < itemNames.length; i++) {
            System.out.println("Enter the next item name: ");
            itemNames[i] = item.nextLine();
            System.out.println("Enter the price for " + itemNames[i] + ": ");
            itemPrices[i] = item.nextDouble();
            item.nextLine();
        }
    }
}

您没有为 itemprices 数组创建对象。而且您的代码也跳过了输入产品名称的部分。 此代码应该有效:

public void enterItemInfo() {
    itemNames = new String[this.itemAmount];
    itemPrices = new Double[this.itemAmount];
    for (int i = 0; i < itemNames.length; i++) {
        System.out.println("Enter the next item name: ");
        itemNames[i] = item.next();
        item.nextLine();
        System.out.println("Enter the price for " + itemNames[i] + ": ");
        itemPrices[i] = item.nextDouble();
        item.nextLine();
    }
}

运行 代码的屏幕截图:

nextInt() 方法在您按回车键时不读取新行,因此 nextLine() 方法只读取这一新行。

有两种解决方法:

你可以这样在 nextInt() 后面加上一个 nextLine()

itemAmount = item.nextInt();
item.nextLine();

或者,更好的是,您可以使用 nextLine() 读取所有输入并将字符串解析为您需要的任何内容:

itemAmount = 0; // give a standard amount if somethings fail in the try-catch
try {
    itemAmount = Integer.parseInt(item.nextLine()); // parse the read line to Integer
} catch(Exception e) {  // catch the exception if the entered line can't be parsed into an Integer. In this case the itemAmount value will be 0
    e.printStackTrace();
}