2017-02-15 2 views
0

Bitte verzeihen Sie mir, wie ich neu bin all dies. Mein Code liest eine Textdatei mit Zahlen und Namen. 3 Sätze von Zahlen nach jedem Namen, jeder Satz von 3 wird in ein Array gelegt. Wenn das Array an eine andere Klasse in der Schleife gesendet wird, wird der Inhalt des Arrays überschrieben, ich nehme an, weil es nur die Adresse des Arrays referenziert, nicht die tatsächlichen Werte.Inhalt des Array überschrieben werden

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

-Code für Werte in einer anderen Klasse

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

Constructor-Methode in anderer Klasse

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

Dies wurde mich verrückt stundenlang so jede Hilfe sehr geschätzt sehr zu speichern, Danke.

+2

Sie die gleiche Array wiederverwenden. Nicht. Java übergibt Referenzen, so dass Sie mit einer 'ArrayList 'enden, bei der jedes Element auf denselben Speicherort zeigt. –

+0

Verwenden Sie auch ein 'Objekt' anstelle eines Arrays. –

+0

Versuchen Sie, die Zeile 'int [] marks = new int [3];' innerhalb der äußeren while-Schleife zu verschieben. –

Antwort

0

Sie könnten den Konstruktor so ändern, dass sie eine Kopie des Arrays erstellt und verwendet es:

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