希望我的标题有意义。我正在尝试使用我的代码是逐行读取具有关于学生(学生ID,名字,姓氏等)属性以及他们所采取的课程的文件。我非常有信心,我的缓冲读取器很好,但是当涉及到我的程序规格时,我有点失落。当我将CourseList ArrayList对象添加到我的Student ArrayList对象时,问题就出现了。代码运行良好,但不会将courseLists添加到学生对象。基本上我制作了2个学生数组列表,这些数列列表应该包含与他们有关的课程。即)Student1,Course1,Course2等。将ArrayList对象添加到不同对象类型的现有ArrayList中
谢谢你在前进,这里是我的代码:
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;
public class studentDir {
static int currentStudent = 0;
public static void main(String args[]) throws IOException{
ArrayList<Student> students = new ArrayList<Student>();
Scanner input = new Scanner(new File("WarmUpData.txt"));
while(input.hasNextLine()) {
String line = input.nextLine();
StringTokenizer st = new StringTokenizer(line,",");
while(st.hasMoreTokens()){
String first, last, idNo;
last = st.nextToken();
first = st.nextToken();
System.out.println("Added student: "+last+", "+first);
idNo = st.nextToken();
System.out.println("Stored ID: "+idNo);
Student s = new Student(last, first, idNo);
students.add(s);
line = input.nextLine();
st = new StringTokenizer(line,",");
while(st.hasMoreTokens()){
String x = st.nextToken();
System.out.println("If controller read in: "+x);
if(x.equals("-999")){
line = input.nextLine();
st = new StringTokenizer(line, ",");
System.out.println("Added Credits & GPA");
Float totalCredits = Float.parseFloat(st.nextToken());
Float gpa = Float.parseFloat(st.nextToken());
students.get(currentStudent).storeGPA(totalCredits, gpa);
System.out.println("GPA Read In : "+students.get(currentStudent).getGPA());
currentStudent++;
}
else{
System.out.println("Adding course.");
String courseID = x;
float credits = Float.parseFloat(st.nextToken());
String grade = st.nextToken();
System.out.println(x+", "+grade);
CourseList cl = new CourseList(courseID,grade,credits);
s.add(cl);
System.out.println(cl.toString());
System.out.println(courseID+" "+credits+" "+grade+" added.");
line = input.nextLine();
st = new StringTokenizer(line,",");
}
}
for(Student x : students)
System.out.println(x.toString());
}
}
input.close();
currentStudent = 0;
}
}
import java.util.ArrayList;
public class Student {
private String firstName;
private String lastName;
private String studentID;
private float gpa;
private float totalCredits;
private ArrayList<CourseList> courses = new ArrayList<>();
Student(String y, String x, String z){
this.firstName = x;
this.lastName = y;
this.studentID = z;
}
public String toString(){
String x = (this.firstName+" "+this.lastName+" "+this.studentID+".");
return x;
}
public void setGPA(float x){
this.gpa = x;
}
public float getGPA(){
return gpa;
}
public String getID(){
return this.studentID;
}
public void gpaCalc(Student stu, String id){
totalCredits = 0;
}
public void storeGPA(float tcredits, float gpa){
this.gpa = gpa;
this.totalCredits = tcredits;
}
public void add(CourseList cl) {
}
}
public class CourseList {
String idNo, grade, courseID;
float credits;
float gpa;
public CourseList(String x, String y, float z) {
this.courseID = x;
this.grade = y;
this.credits = z;
}
public String toString(){
String x = ("Course ID: "+this.courseID+", Grade : "+this.grade+", Credits Earned : "+this.credits+".");
return x;
}
public float getCredits() {
return this.credits;
}
}
Input:
Jones,Mary,903452
4342,2.5,A
3311,4,B+
-999
6.5,3.569
Martin,Joseph,312345
4598,3,C
1122,3,A-
2467,4,A
-999
10,3.31
Output:
Added student: Jones, Mary
Stored ID: 903452
If controller read in: 4342
Adding course.
4342, A
Course ID: 4342, Grade : A, Credits Earned : 2.5.
4342 2.5 A added.
If controller read in: 3311
Adding course.
3311, B+
Course ID: 3311, Grade : B+, Credits Earned : 4.0.
3311 4.0 B+ added.
If controller read in: -999
Added Credits & GPA
GPA Read In : 3.569
Mary Jones 903452.
Added student: Martin, Joseph
Stored ID: 312345
If controller read in: 4598
Adding course.
4598, C
Course ID: 4598, Grade : C, Credits Earned : 3.0.
4598 3.0 C added.
If controller read in: 1122
Adding course.
1122, A-
Course ID: 1122, Grade : A-, Credits Earned : 3.0.
1122 3.0 A- added.
If controller read in: 2467
Adding course.
2467, A
Course ID: 2467, Grade : A, Credits Earned : 4.0.
2467 4.0 A added.
If controller read in: -999
Added Credits & GPA
GPA Read In : 3.31
Mary Jones 903452.
Joseph Martin 312345.
预先感谢您的家伙!
学生#添加方法不执行任何你使用一个HashMap认为 – user3662708
? –
我没有通过所有的代码,但while(st.hasMoreTokens())如果这个循环迭代两次在你的第一个学生,你将最终得到students.get(1),而你只有一个学生,也许这是不相关的解决问题,但重新考虑跟踪当前学生的方式 –