如何在 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();
}
我在使用块底部的 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();
}