我创建了一个名为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”的运行。这意味着我实际上最终得到一个学生,其数字是“退出”课程是什么,而标记是什么。
如果输入“退出”,我该如何强制它中断?
答案 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"));