2017-02-15 20 views
0

私はこのすべてに慣れていませんので、私を許してください。 私のコードは数字と名前のテキストファイルを読み込みます。それぞれの名前の後に3つの数字のセット、3の各セットは配列に入れられます。配列がループ内の別のクラスに送られると、配列の内容は上書きされます。実際の値ではなく配列のアドレスを参照しているだけなので、私は推測しています。アレイの内容が上書きされています

 public void readMarksData(String fileName) throws FileNotFoundException 
{ 
    File dataFile = new File(fileName); 
    Scanner scanner = new Scanner(dataFile); 

    int[] marks = new int[3]; 
    scanner.nextLine(); 

    int i = 0; 
    while(scanner.hasNext()) 
    { 
     String studentName = scanner.nextLine(); 
     while(i < 3) 
     { 
      try 
      { 
       marks[i] = scanner.nextInt(); 
       i++; 
      } 
      catch (InputMismatchException ex) 
      { 
       i=0; 
      } 
     } 
     scanner.nextLine(); 
     storeStudentRecord(studentName, marks); 
     //scanner.nextLine(); 
     i=0; 
    } 
    scanner.close(); 
} 

コード他のクラスのコンストラクタメソッド

public StudentRecord(String nameInput, int[] marksInput) 
{ 
    // initialise instance variables 
    name = nameInput; 
    noOfMarks = 0; 
    marks = marksInput; 
} 

これは、任意の助けを大幅に大幅に高く評価されるであろうように時間私にナットを駆動されている別のクラスの値

private void storeStudentRecord(String name, int[] marks) 
{ 
    //int[] x = new int[3] 
    StudentRecord student = new StudentRecord(name, marks); 
    marksList.add(student); 
} 

を格納するための、ありがとうございました。

+2

をあなたが同じ配列を再利用しています。しないでください。 Javaは参照を渡しますので、各要素が同じメモリ位置を指し示す 'ArrayList'で終わります。 –

+0

また、配列ではなく 'Object'を使うことを検討してください。 –

+0

外側の 'while'ループの内側で' int [] marks = new int [3]; '行を移動してみてください –

答えて

0

それは、配列のコピーを作成し、それを使用するように、あなたはコンストラクタを修正することができます:

public StudentRecord(String nameInput, int[] marksInput) 
{ 
    // initialise instance variables 
    name = nameInput; 
    noOfMarks = 0; 
    if(marksInput!=null) 
    marks = Arrays.copyOf(marksInput, marksInput.length); 
    else 
    marks = null; 
} 
関連する問題