如何从Java中的arraylist返回特定对象(索引)?

时间:2013-03-08 05:17:34

标签: java class object arraylist sentinel

我创建了一个名为Student的类,并为其分配了3个值(StudentNumber,Course,Mark);然后我将创建的学生分配到名为studentsCourses的arrayList。

这样每个学生都会在数组中占用一个索引。但是如何让学生回到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的状态我该怎么做?

我的另一个问题(伴随这段代码)是我的哨兵。当我输入quit时确实会退出。但它首先完成了“do”的运行。这意味着我实际上最终得到一个学生,其数字是“退出”课程是什么,而标记是什么。

如果输入“退出”,我该如何强制它中断?

7 个答案:

答案 0 :(得分:1)

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

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

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

List<Student> students = new ArrayList<Student>();
// add students
for (Student student : students) {
  // do something with student
}

答案 1 :(得分:1)

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

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

答案 2 :(得分: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();
        }

答案 3 :(得分: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;
}

简单的解决方案。

答案 4 :(得分: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

答案 5 :(得分: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);

答案 6 :(得分:0)

为什么不将带有键的hashmap作为学生编号和对象作为学生对象使用该键。通过这种方式,您也可以避免重复。
对于哨兵

         // 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"));