2017-02-15 146 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(); 
} 

代码在其他类

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

构造方法在另一类存储值

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

这已被我逼疯了好几个小时,因此任何帮助将不胜感激,谢谢。

+2

你重复使用相同的阵列。别。 Java传递引用,所以你最终得到一个'ArrayList',其中每个元素指向同一个内存位置。 –

+0

另外,考虑使用“对象”而不是数组。 –

+0

尝试移动行int [] marks = new int [3];'在外'while循环中 –

回答

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; 
}