我正在处理家庭作业问题。现在,我有一个名字列表。我有一个函数,应该将名称添加到列表中,而另一个应该将其获取。但是,它只是得到一个空字符串
我尝试通过获取数组的size()来进行调试,该数组在添加时会增加,但是我无法获取添加的项的内容(如果有的话)
import java.util.List;
import java.util.Scanner;
public class main
{
public static void main(String args[]) {
List<String> studentNames = new ArrayList<>();
List<List<Integer>> studentScores = new ArrayList<>();
List<String> assignmentNames = new ArrayList<>();
List<Integer> assignmentMaxPoints = new ArrayList<>();
Scanner in = new Scanner(System.in);
while (true) {
System.out.println("");
System.out.println("----------------");
System.out.println("1) New Student");
System.out.println("2) Edit Student Name");
System.out.println("3) Delete Student");
System.out.println("4) New Assignment");
System.out.println("5) View Student");
System.out.println("6) View Averages");
System.out.println("----------------");
if (0 != studentNames.size()) {
System.out.println(studentNames);
}
int choice = in.nextInt();
if (choice == 1) {
System.out.println("");
System.out.println("----------------");
System.out.println("Enter the student name:");
System.out.println("----------------");
in.next();
String name = in.nextLine();
studentNames.add(name);
}
if (choice == 2) {
System.out.println("");
System.out.println("----------------");
System.out.println("Enter the old student name:");
System.out.println("----------------");
in.next();
String oldName = in.nextLine();
System.out.println("");
System.out.println("----------------");
System.out.println("Enter the new student name:");
System.out.println("----------------");
in.next();
String newName = in.nextLine();
for (int nameIndex = 0; nameIndex < studentNames.size(); nameIndex++) {
if (studentNames.get(nameIndex).equals(oldName)) {
studentNames.set(nameIndex, newName);
}
}
}
if (choice == 3) {
System.out.println("");
System.out.println("----------------");
System.out.println("Enter the student name:");
System.out.println("----------------");
in.next();
String name = in.nextLine();
for (int nameIndex = 0; nameIndex < studentNames.size(); nameIndex++) {
if (studentNames.get(nameIndex).equals(name)) {
studentNames.remove(nameIndex);
}
}
}
if (choice == 6) {
System.out.println("");
for (int studentIndex = 0; studentIndex < studentNames.size(); studentIndex++) {
System.out.println(studentNames.get(studentIndex));
}
}
}
}
}
我希望第六种选择的代码可以打印出StudentNames中的所有学生,但是只打印空白行。
答案 0 :(得分:1)
您没有描述输入内容,但问题似乎出在选择1.您有两次调用扫描程序,in.next()
会从输入中返回第一个单词(直到空格),而{{1 }},它从输入中返回整行。
要解决此问题,只需删除in.readLine()
有关更多信息,请查看What's the difference between next() and nextLine() methods from Scanner class?
答案 1 :(得分:1)
由于您接收输入的方式,它没有显示任何内容。让我尝试解释一下。当您写in.next()
时,扫描程序会尝试在输入终端上的空格前读取单词。因此,假设您输入Peter
作为学生的姓名,in.next()
将读取Peter,但是由于您没有将其分配给任何变量,因此不会使用它。然后,您做了String name = in.nextLine()
,这将尝试读取终端机下一行的输入,这将是一个空字符串,因为您没有提供任何输入。
使您的代码正常工作。写
String name = in.next();
删除
String name = in.nextLine();
现在应该可以正常工作
请注意,数组的大小会增加,因为正在向其中添加空字符串。