希望我的头衔有道理。我试图用我的代码做的是逐行读取一个文件,该文件具有关于学生(学生ID,名字,姓氏等)和他们所学的课程的属性。我非常有信心我的缓冲读卡器很好,但是在我的程序规格方面,我有点迷失。当我将CourseList ArrayList对象添加到Student ArrayList对象时,会出现问题。代码运行正常,但不会将courseLists添加到student对象。基本上我正在制作2个学生数组列表,这些列表应该包含与之相关的课程。即)学生1,课程1,课程2等。
提前谢谢,这是我的代码:
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.
先谢谢你们!
答案 0 :(得分:1)
恕我直言,使用两种不同类型的ArrayList在这里不是一个好主意。您应该使用类似Map<Student, ArrayList<Course>>
的内容。它是:
答案 1 :(得分:0)
在你的代码中,你的addCourse方法是空的
public void add(CourseList cl) {
}
我想这是你的问题
答案 2 :(得分:0)
只需将CourseList的ArrayList设置为Student Class,然后就可以了
public class studentDir {
static int currentStudent = 0;
public static void main(String args[]) throws IOException{
ArrayList<Student> students = new ArrayList<Student>();
ArrayList<CourseList> courseLists=new ArrayList<>();
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);
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);
courseLists.add(cl);
s.setCourses(courseLists);
System.out.println(cl.toString());
System.out.println(courseID+" "+credits+" "+grade+" added.");
line = input.nextLine();
st = new StringTokenizer(line,",");
}
students.add(s);
}
for(Student x : students)
System.out.println(x);
}
}
input.close();
currentStudent = 0;
}
}
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 ArrayList<CourseList> getCourses() {
return courses;
}
public void setCourses(ArrayList<CourseList> courses) {
this.courses = courses;
}
}
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;
}
}