程序跳过输入之一
Program skipping one of the inputs
当我的程序到达要求水果名称的部分时,它会输出要求名称的字符串,然后立即转到下一个字符串输出,而无需等待用户输入。
这似乎自动为我的 name 变量分配了 null 值。
Fruit.java
public class Fruit {
String Name;
int Quantity;
double Mass;
public Fruit(String Name, int Quantity, double Mass) {
this.Name = Name;
this.Quantity = Quantity;
this.Mass = Mass;
}
public void Information() {
System.out.println("This fruit is an " + Name + ", there's " + Quantity
+ " of it and it weighs " + Mass + " grams");
}
}
Fruits.java
import java.util.Scanner;
public class Fruits {
public static void main(String[] args) {
Fruit menu[];
int number;
String name;
int quantity;
double mass;
System.out
.print("How many fruits would you like to add to the menu?: ");
Scanner input = new Scanner(System.in);
number = input.nextInt();
input.nextLine();
menu = new Fruit[number];
for (int i = 0; i < menu.length; i++) {
System.out.println("What would you like to name the fruit?: ");
name = input.nextLine();
System.out.println("How much fruits are there?: ");
quantity = input.nextInt();
System.out.println("What is the mass of the Fruit in grams?: ");
mass = input.nextDouble();
menu[i] = new Fruit(name, quantity, mass);
menu[i].Information();
}
input.close();
}
}
问题是扫描整数,然后是 nextLine。当你 运行 .nexInt() 我相信有一个换行符没有被扫描进来,所以这会立即与下面的 .nextLine() 混淆,因为它只接受换行符而不接受后面的任何内容
我知道的最简单的修复是
number = input.nextInt();
input.nextLine();
menu = new Fruit[number];
然后其余代码应该可以工作
顺便说一句,通常你会从 0 开始循环,因为数组从 0 开始,你将有一个空白的第一个条目,但我认为这在这段特定的代码中并不重要
而不是 input.nextInt();
使用 Integer.parseInt(input.nextLine())
。它可能会解决您的问题。
当您使用 input.nextInt()
时,集线器中有一个 %n
字符。您需要在删除换行符之后使用 input.nextLine()
。您也可以对每个变量使用 input.nextLine()
然后自己解析它。
警告!在 java 约定中,方法名称、属性名称和参数名称必须以小写字符开头。
当我的程序到达要求水果名称的部分时,它会输出要求名称的字符串,然后立即转到下一个字符串输出,而无需等待用户输入。 这似乎自动为我的 name 变量分配了 null 值。
Fruit.java
public class Fruit {
String Name;
int Quantity;
double Mass;
public Fruit(String Name, int Quantity, double Mass) {
this.Name = Name;
this.Quantity = Quantity;
this.Mass = Mass;
}
public void Information() {
System.out.println("This fruit is an " + Name + ", there's " + Quantity
+ " of it and it weighs " + Mass + " grams");
}
}
Fruits.java
import java.util.Scanner;
public class Fruits {
public static void main(String[] args) {
Fruit menu[];
int number;
String name;
int quantity;
double mass;
System.out
.print("How many fruits would you like to add to the menu?: ");
Scanner input = new Scanner(System.in);
number = input.nextInt();
input.nextLine();
menu = new Fruit[number];
for (int i = 0; i < menu.length; i++) {
System.out.println("What would you like to name the fruit?: ");
name = input.nextLine();
System.out.println("How much fruits are there?: ");
quantity = input.nextInt();
System.out.println("What is the mass of the Fruit in grams?: ");
mass = input.nextDouble();
menu[i] = new Fruit(name, quantity, mass);
menu[i].Information();
}
input.close();
}
}
问题是扫描整数,然后是 nextLine。当你 运行 .nexInt() 我相信有一个换行符没有被扫描进来,所以这会立即与下面的 .nextLine() 混淆,因为它只接受换行符而不接受后面的任何内容 我知道的最简单的修复是
number = input.nextInt();
input.nextLine();
menu = new Fruit[number];
然后其余代码应该可以工作
顺便说一句,通常你会从 0 开始循环,因为数组从 0 开始,你将有一个空白的第一个条目,但我认为这在这段特定的代码中并不重要
而不是 input.nextInt();
使用 Integer.parseInt(input.nextLine())
。它可能会解决您的问题。
当您使用 input.nextInt()
时,集线器中有一个 %n
字符。您需要在删除换行符之后使用 input.nextLine()
。您也可以对每个变量使用 input.nextLine()
然后自己解析它。
警告!在 java 约定中,方法名称、属性名称和参数名称必须以小写字符开头。