0

我创建了一个名为 Student 的类并为其分配了 3 个值(StudentNumber、Course、Mark);然后我将一个创建的学生分配给一个名为 studentsCourses 的数组列表。

这样每个学生都会在数组中占用一个索引。但是我怎样才能让学生从 arrayList 中退出……如果这有意义的话?我已经将它们存储起来,但我不知道如何调用这些信息以便我可以看到它。

public static void main (String[]args){
ArrayList<Student> studentsCourses= new ArrayList<Student>();
String studentNumber="~";
String course="~";
int mark=0;

Student pat;

Student s=null;

do{
  s=new Student();
  System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
  studentNumber=keybrd.next();
  s.setStudentNumber(studentNumber);
  System.out.println("Please Enter Your Course ID:\n");
  course=keybrd.next();
  s.setCourse(course);
  System.out.println("Please Enter Your Mark:\n");
  mark=keybrd.nextInt();
  s.setMark(mark);
  s.printStates();
  studentsCourses.add(s);
}while(!studentNumber.equals("quit"));

System.out.println(studentsCourses.size());   
System.out.println(studentsCourses);

所以如果我想为创建的学生(pat)分配索引 1 的状态,我该怎么做?

我的另一个问题(连同这段代码)是我的哨兵。当我输入退出时它确实退出了。但它首先完成了“做”。这意味着我实际上最终得到了一个学生,他的数字是“退出”课程是什么,而分数是什么。

一旦键入“退出”,我如何强制它中断执行?

4

7 回答 7

1

ArrayList 不是一个数组...它是一个使用数组作为其后备存储的 List。

从列表中检索方法是list.get(index)

或者,您可以使用一些语法糖来循环它们

List<Student> students = new ArrayList<Student>();
// add students
for (Student student : students) {
  // do something with student
}
于 2013-03-08T05:22:30.937 回答
1

使用get(int)方法检索元素。

使用add(int, E)方法在索引处插入元素。

于 2013-03-08T05:23:53.190 回答
1

尝试

System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
        studentNumber=keybrd.next();

        while (!studentNumber.equals("quit")){
            s=new Student();

            s.setStudentNumber(studentNumber);
            System.out.println("Please Enter Your Course ID:\n");
            course=keybrd.next();
            s.setCourse(course);
            System.out.println("Please Enter Your Mark:\n");
            mark=keybrd.nextInt();
            s.setMark(mark);
            s.printStates();
            studentsCourses.add(s);

            System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
            studentNumber=keybrd.next();
        }
于 2013-03-08T05:25:23.333 回答
1

你需要知道两件事:-

首先,您正在使用一个do-while循环,它是一个退出检查循环,因此它将在终止之前至少执行一次。如果您想避免它,请尝试使用while循环。

接下来,要从列表中检索所有元素,您可以使用list.get(index)for循环遍历,如下所示:-

List<Student> students = new ArrayList<Student>();
for (Student student : students) {
    // Do something with the student object.
}

更新:-

for您在上面看到的实际上是Foreach循环。这就是它的意思

for each item in collection:
  do something to item

因此,循环意味着,

对于集合(学生)中的每个项目(学生) ,对项目(学生) 做一些事情

现在回到循环部分。忘记一切,只需使用break;.

在这段代码之后studentNumber=keybrd.next();,进行检查并中断循环。

if(studentNumber.equals("quit")){
    break;
}

简单的解决方案。

于 2013-03-08T05:26:05.630 回答
1

您可以向学生类添加一个toString()方法:

  @Override
  public String toString()
  {
      return "\tStudentNumber: " + studentNumber
                + "\tCourse: " + course 
                + "\tMarks: " + marks;

  }

然后你可以说:

   System.out.println(studentsCourses);

就此而言:

   How do I force it to break the do as soon as "quit" is typed?

这种行为是因为您正在使用do..while()! 尝试while改用。

于 2013-03-08T05:26:38.773 回答
1

“但是我如何让学生从 arrayList 中退出……如果这有意义的话?我已经将它们存储起来,但我不知道如何调用这些信息以便我可以看到它。”

从 arraylist 中获取数据:

for (Student student : studentsCourses) {
        System.out.println(student.getStudentNumber());
        System.out.println(student.getCourse());
        System.out.println(student.getMarkr());
    }

或者

for (int i = 0; i < studentsCourses.size(); i++) {
        Student student = studentsCourses.get(i);
        System.out.println(student.getStudentNumber());
        System.out.println(student.getCourse());
        System.out.println(student.getMarkr());
    }

要解决其他问题,您可以尝试:

      do{
          s=new Student();
          System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
          studentNumber=keybrd.next();
          if(studentNumber.equals("quit"))
              break;
          s.setStudentNumber(studentNumber);
          System.out.println("Please Enter Your Course ID:\n");
          course=keybrd.next();
          s.setCourse(course);
          System.out.println("Please Enter Your Mark:\n");
          mark=keybrd.nextInt();
          s.setMark(mark);
          s.printStates();
          studentsCourses.add(s);
        }while(true);
于 2013-03-08T05:31:26.453 回答
0

为什么不使用带有键作为学生编号和对象的哈希图作为学生对象。这样,您也可以避免重复。
对于哨兵

         // 1. Create a Scanner using the InputStream available.
        Scanner scanner = new Scanner( System.in );
        String input=null;
do{
        // 2. Don't forget to prompt the user
        System.out.print( "Type some data for the program: " );

        // 3. Use the Scanner to read a line of text from the user.
         input = scanner.nextLine();

        // 4. Now, you can do anything with the input string that you need to.
        // Like, output it to the user.
        System.out.println( "input = " + input );
}while(!input.equalsIgnoreCase("quit"));
于 2013-03-08T05:19:32.453 回答