Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何从arraylist返回特定对象(索引)?_Java_Class_Object_Arraylist_Sentinel - Fatal编程技术网

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

在Java中,如何从arraylist返回特定对象(索引)?,java,class,object,arraylist,sentinel,Java,Class,Object,Arraylist,Sentinel,我创建了一个名为Student的类,并给它分配了3个值(StudentNumber、Course、Mark);然后,我将一个创建的学生分配给一个名为studentsCourses的arrayList 这样,每个学生在数组中使用一个索引。但是我怎样才能让学生们从arrayList中恢复过来。。。这有意义吗?我把它们存储起来了,但我不知道如何回忆这些信息以便我能看到它 public static void main (String[]args){ ArrayList<Student> s

我创建了一个名为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);
publicstaticvoidmain(字符串[]args){
ArrayList StudentScorses=新的ArrayList();
字符串studentNumber=“~”;
字符串course=“~”;
整数分=0;
学生帕特;
学生s=null;
做{
s=新生();
System.out.println(“请输入您的学生ID(键入quit以退出):\n”);
studentNumber=keybrd.next();
s、 设置学生编号(学生编号);
System.out.println(“请输入您的课程ID:\n”);
course=keybrd.next();
s、 赛程(赛程);
System.out.println(“请输入您的标记:\n”);
mark=keybrd.nextInt();
s、 设定标记;
s、 打印状态();
学生人数:增加;
}而(!studentNumber.equals(“quit”));
System.out.println(studentsCourses.size());
系统输出打印(学生浏览);
因此,如果我想为创建的学生(pat)分配索引1的状态,我该怎么做

我的另一个问题(与这段代码一起)是我的sentinel。当我键入quit时,它确实会退出。但它首先完成了“do”的运行。这意味着我最终遇到了一个学生,他的编号是“quit”,课程是什么,mark是什么


如何在键入“退出”后立即强制其中断do?

为什么不使用哈希映射,将键作为学生编号,将该键的对象作为学生对象。这样也可以避免重复。
对于哨兵

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

为什么不使用一个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"));

ArrayList不是数组…它是一个使用数组作为其备份存储的列表

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

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

List<Student> students = new ArrayList<Student>();
// add students
for (Student student : students) {
  // do something with student
}
List students=new ArrayList();
//添加学生
用于(学生:学生){
//对学生做点什么
}

ArrayList不是一个数组……它是一个使用数组作为后备存储的列表

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

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

List<Student> students = new ArrayList<Student>();
// add students
for (Student student : students) {
  // do something with student
}
List students=new ArrayList();
//添加学生
用于(学生:学生){
//对学生做点什么
}
使用方法检索元素

使用方法在索引处插入元素。

使用方法检索元素

使用方法在索引处插入元素。

尝试

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();
        }
试一试


有两件事你需要知道:-

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

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

List<Student> students = new ArrayList<Student>();
for (Student student : students) {
    // Do something with the student object.
}
因此,循环意味着

对于集合(学生)中的每个项目(学生)
项目(学生)

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

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

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

简单的解决方案。

有两件事你需要知道:-

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

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

List<Student> students = new ArrayList<Student>();
for (Student student : students) {
    // Do something with the student object.
}
因此,循环意味着

对于集合(学生)中的每个项目(学生)
项目(学生)

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

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

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

简单的解决方案。

您可以在学生的课堂上添加
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

您可以在学生的课堂上添加
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

“但是我如何让学生从arrayList中恢复过来……如果这样做有意义的话?我已经存储了他们,但我不知道如何调用信息以便查看。”

要从arraylist获取数据,请执行以下操作:

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

“但我如何让学生们从arrayList中恢复过来……如果这有意义的话?我已经把他们存储起来了,但我不知道如何回忆信息以便我能看到它。”

要从arraylist获取数据,请执行以下操作:

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


你到底想做什么?我实际上推迟了近一个小时发布这篇文章,以为我能找到简单的解决方案,但我没有;现在(发布后5分钟)我想出来了。这是非常简单的pat=studentsCourses.get(index);我仍然需要修复sentinel部分,但如果有人可以帮助我?@Anubhab我希望程序向用户询问他们的学号、课程名称,