清单中的项目,但以后无法.get()

时间:2019-05-04 18:31:10

标签: java

我正在处理家庭作业问题。现在,我有一个名字列表。我有一个函数,应该将名称添加到列表中,而另一个应该将其获取。但是,它只是得到一个空字符串

我尝试通过获取数组的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中的所有学生,但是只打印空白行。

2 个答案:

答案 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();

现在应该可以正常工作

请注意,数组的大小会增加,因为正在向其中添加空字符串。