2017-04-11 11 views
0

こんにちは私はオブジェクトの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(); 
    } 
} 

答えて

0

あなたはCSVファイル読み込みループを通して結果配列ごとの繰り返しを再作成:

finalStudentGradesArray =新しいArrayListのを();

+0

はい。 'finalStudentGradesArray = new ArrayList ();をwhileループの外に移動するか、コンストラクタに移動してください。 –

+0

@Davidありがとう、私はちょうどリーダーループの外でArrayListをインスタンス化し、各繰り返しで新しいArrayListを作成していたコード行を削除しました。そんなDavidにありがとうございました。これが私にとってこの問題を解決しました。 –

関連する問題