2013-10-11 17 views
6

Studentennamen (String []) und entsprechende Marken (int []) werden in verschiedenen Arrays gespeichert.Iterieren über zwei Arrays gleichzeitig für jede Schleife in Java

Wie kann ich über beide Arrays zusammen für jede Schleife in Java durchlaufen?

void list() { 

    for(String s:studentNames) { 
     System.out.println(s); //I want to print from marks[] alongside. 
    } 
} 

Ein trivialer Weg könnte die Verwendung von Indexvariablen in der gleichen Schleife sein. Gibt es einen guten Weg?

+0

Warum ist das normal (eines mit Index-Variable) nicht gut genug? –

+0

Betrachten Sie eine Karte. wie hashmap –

+0

Es sollte angemerkt werden, dass es nicht sehr schönes Design ist, Dinge zu halten, die eine Zuordnung in separaten Arrays haben. Stattdessen sollten Sie eine Map verwenden oder eine einfache Klasse mit Namen und Markenattributen erstellen und ein einzelnes Array (oder eine Liste) dieser Objekte haben. –

Antwort

6

die zugrunde liegende pro blem ist eigentlich, dass Sie beide Arrays zusammenbinden und über nur ein Array iterieren sollten.

Dies ist eine sehr einfache Demonstration - sollten Sie Getter und Setter verwenden, und Sie sollten auch eine List anstelle eines Arrays verwenden, aber dies zeigt, auf den Punkt:

class Student { 
    String name; 
    int mark; 
} 
Student[] students = new Student[10]; 

for (Student s : students) { 
    ... 
} 
10

Sie müssen es tun, um die regelmäßige for Schleife mit einem Index verwendet wird, wie folgt aus:

if (marks.length != studentNames.length) { 
    ... // Something is wrong! 
} 
// This assumes that studentNames and marks have identical lengths 
for (int i = 0 ; i != marks.length ; i++) { 
    System.out.println(studentNames[i]); 
    System.out.println(marks[i]); 
} 

Ein besserer Ansatz wäre eine Klasse werden mit einem Schüler speichern zusammen mit ihren/seinen Marken, wie folgt aus:

class StudentMark { 
    private String name; 
    private int mark; 
    public StudentMark(String n, int m) {name=n; mark=m; } 
    public String getName() {return name;} 
    public int getMark() {return mark;} 
} 

for (StudentMark sm : arrayOfStudentsAndTheirMarks) { 
    System.out.println(sm.getName()); 
    System.out.println(sm.getMark()); 
} 
+1

Einverstanden. Mit der "foreach" -Variante von for lässt sich das nicht erreichen. –

+0

@StefanWinkler Zumindest nicht ohne die Studenten und ihre Marken in ein einziges Objekt zu verschmelzen. – dasblinkenlight

+1

Ich würde +2 geben, wenn ich könnte. Perfekte Antwort + bessere Lösung –

4

Wenn sie beide die gleiche Größe haben, würde ich schreiben:

for(int i = 0; i<marks.length; i++) { 
    String names= studentNames[i] 
    int mark = marks[i];  

} 
+1

Marks ist ein int-Array. Ich habe es korrigiert –

Verwandte Themen