こんにちは私はオブジェクトのArrayListの印刷に問題があります。私はCSVファイル(この作品)から値をインポートし、私が作成したオブジェクト(StudentInfo)に値を保存して、各オブジェクト情報を繰り返して印刷したいと思います。オブジェクトのArrayListの繰り返しと各オブジェクトの各変数の印刷
私は調査してこれを解決できませんでした。コードでいくつか変更しました.1つのオブジェクトを期待どおりに印刷することができ、ArrayListに最後に格納されたオブジェクトのようです。
私はコードをトレースしています(Eclipseでデバッガを使用しています)、whileループに1回だけ入ることがわかりました。
私はprintResults()メソッドの中に問題があると考えていますが、whileループに1回しか入っていない理由を説明することはできません(以前のように、ArrayListの最後のインデックスだけです)。
下記のコードブロックをご覧ください。これを確認していただきありがとうございます。ご協力いただきありがとうございます。これは宿題なので、私たちはtokenizerを使うように言われました(しかし教授は将来的にもっと良い方法を学ぶと言っていましたが)。
package excercise12Dot1;
public class StudentInfo {
private String type;
private String fName;
private String lName;
private double testOne;
private double testTwo;
private double testThree;
private double finalGrade;
public StudentInfo() {
this.type = "";
this.fName = "";
this.lName = "";
this.testOne = 0;
this.testTwo = 0;
this.testThree = 0;
this.finalGrade = 0;
}
public StudentInfo(String type, String fname, String lName, double testOne, double testTwo, double testThree, double finalGrade){
this.type = type;
this.fName = fname;
this.lName = lName;
this.testOne = testOne;
this.testTwo = testTwo;
this.testThree = testThree;
this.finalGrade = finalGrade;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
public double getTestOne() {
return testOne;
}
public void setTestOne(double testOne) {
this.testOne = testOne;
}
public double getTestTwo() {
return testTwo;
}
public void setTestTwo(double testTwo) {
this.testTwo = testTwo;
}
public double getTestThree() {
return testThree;
}
public void setTestThree(double testThree) {
this.testThree = testThree;
}
public double getFinalGrade() {
return finalGrade;
}
public void setFinalGrade(double finalGrade) {
this.finalGrade = finalGrade;
}
}
package excercise12Dot1;
import java.io.File;
import java.util.StringTokenizer;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class NonCreditCourseGrades {
private Scanner csvReader;
private int counter = 0;
private ArrayList<StudentInfo> finalStudentGradesArray;
public void openFile(){
try{
csvReader = new Scanner(new File("StudentsScores.csv"));
while (csvReader.hasNext()){
String studentRecord = csvReader.nextLine();
StringTokenizer tokenizer = new StringTokenizer(studentRecord, ",");
String type = tokenizer.nextToken();
String fName = tokenizer.nextToken();
String lName = tokenizer.nextToken();
double testOne = Double.parseDouble(tokenizer.nextToken());
double testTwo = Double.parseDouble(tokenizer.nextToken());
double testThree = Double.parseDouble(tokenizer.nextToken());
double finalScore = 0;
StudentInfo newStudent = new StudentInfo(type, fName, lName, testOne, testTwo, testThree, finalScore);
finalStudentGradesArray = new ArrayList<StudentInfo>();
finalStudentGradesArray.add(newStudent);
++counter;
}
}catch(FileNotFoundException ex){
System.err.println("FILE NOT FOUND");
}
csvReader.close();
}
public void printResults(){
Iterator<StudentInfo> itr = finalStudentGradesArray.iterator();
while (itr.hasNext()){
StudentInfo results = (StudentInfo)itr.next();
System.out.println("Student Type:\t" + results.getType() + "\nFirst Name:\t" + results.getfName() + "\nLast Name:\t" + results.getlName() + "\nTest 1:\t\t" + results.getTestOne() + "\nTest 2:\t\t" + results.getTestTwo() + "\nTest 3:\t\t" + results.getTestThree() + "\nFinal Score: \t" + results.getFinalGrade() + "\n\n");
}
}
package excercise12Dot1;
public class NonCreditCourseGradesRunner {
public static void main(String[] args) {
NonCreditCourseGrades test = new NonCreditCourseGrades();
test.openFile();
test.printResults();
}
}
はい。 'finalStudentGradesArray = new ArrayList();をwhileループの外に移動するか、コンストラクタに移動してください。 –
@Davidありがとう、私はちょうどリーダーループの外でArrayListをインスタンス化し、各繰り返しで新しいArrayListを作成していたコード行を削除しました。そんなDavidにありがとうございました。これが私にとってこの問題を解決しました。 –