我正试图让用户设置他们设置的数字的名称。例如,如果他们设置3,程序会询问名称3次,然后将这些名称设置为数组中的不同变量。
public static void main(String[] args) {
Scanner Num = new Scanner(System.in);
Scanner Name = new Scanner(System.in);
System.out.println("How many names do you want to enter: ");
int number = Num.nextInt();
int[] numbs = new int[number];
for (int i = 0; i < numbs.length; i++) {
System.out.println("What is your name");
String [] nameArray = Name.nextLine();
与泰坦的答案相比,这只是一个小小的改进。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("How many names do you want to enter: ");
int numberOfTimes = sc.nextInt();
String[] names = new String[numberOfTimes];
sc.nextLine();
for (int i = 0; i < numberOfTimes; i++) {
System.out.println("What is your name");
names[i] = sc.nextLine();
}
System.out.println(Arrays.toString(names));
}
起点
以下是你发布的代码中发生的几件事:
- 您有两个不同的扫描仪,每个扫描仪都从System.in读取
- 在提示用户输入(
int number = Num.nextInt()
(之后,您将使用该数字创建一个大小为"0"的数组;数字"> - 当您调用nextLine((时,您正在将结果分配给一个字符串数组(
String []
(
工作解决方案
这里有一个解决这些问题的变体,也添加了一些内容:
- 使用一个扫描仪,并给它一个通用名称("扫描仪",而不是"数字"(,因为扫描仪与一种特定的数据类型无关。任何扫描仪都可以读取字符串、整数、布尔值、字节等。请在Javadoc中查找支持的全套数据类型
- 在尝试创建数组之前检查用户输入是否有效——如果用户输入"-1〃;这是一个有效的整数值,但对分配数组无效(
new int[-1]
(将在运行时抛出java.lang.NegativeArraySizeException - 使用";next((";而不是";nextLine(("对于您的示例的其余部分,使用";nextLine(("导致跳过一行而没有用户的直接交互(因此第一个"名称"总是空字符串(
- 将";next((";到String(而不是
String[]
(,匹配该方法的返回类型 - 使用";System.out.print((";而不是";println((";,更整洁的程序输出
- 使用小写名称以遵循Java命名约定("scanner",而不是"scanner"(
Scanner scanner = new Scanner(System.in);
System.out.print("How many names do you want to enter: ");
int times = scanner.nextInt();
if (times < 0) {
System.out.println("negative numbers not allowed");
} else {
String[] names = new String[times];
for (int i = 0; i < times; i++) {
System.out.print("What is your name: ");
names[i] = scanner.next();
}
System.out.println(Arrays.toString(names));
}
下面是一个运行示例:
How many names do you want to enter: 3
What is your name: one
What is your name: two
What is your name: three
[one, two, three]
在循环外创建一个数字长度的String数组,并将名称作为输入初始化每个索引
顺便说一句,您只需要创建一个扫描仪对象进行输入(不需要为不同的输入创建各种对象(
编辑-没有使用numbs数组。
Scanner sc=new Scanner(System.in);
System.out.println("How many names do you want to enter: ");
int number = sc.nextInt();
String []nameArray=new String[number];
/*Since nextInt() does not read the newline character in your input
created by hitting "Enter"*/.
sc.nextLine();
for (int i = 0; i < number; i++) {
System.out.println("What is your name");
nameArray[i]=sc.nextLine();
}
sc.close(); //To prevent memory leak