2013-10-11 15 views
6

I nomi degli studenti (String []) e i segni corrispondenti (int []) sono memorizzati in array diversi.Iterazione su due array contemporaneamente utilizzando per ogni ciclo in Java

In che modo è possibile eseguire iterazioni su entrambi gli array utilizzando per ogni ciclo in Java?

void list() { 

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

Un modo semplice potrebbe essere utilizzare la variabile di indice nello stesso ciclo. C'è un buon modo di fare?

+0

Perché è la normale (uno con variabile indice) non buono abbastanza? –

+0

considera una mappa. come hashmap –

+0

Va notato che non è molto bello il design per mantenere le cose che hanno un'associazione in array separati. Invece dovresti usare una mappa o creare una classe semplice con gli attributi name e mark e avere una singola matrice (o lista) di questi oggetti. –

risposta

6

il fondo pro blem in realtà è che dovresti legare entrambi gli array insieme e scorrere attraverso un solo array.

Ecco una dimostrazione molto semplicistico - si dovrebbe utilizzare getter e setter e si dovrebbe anche usare un List al posto di un array, ma questo dimostra il punto:

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

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

È necessario farlo utilizzando la normale for ciclo con un indice, in questo modo:

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

Un approccio migliore sarebbe utilizzare una classe per memorizzare uno studente insieme ai suoi/suoi marchi, come questo:

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

concordato. Non c'è modo di ottenere questo con la variante "foreach" di for. –

+0

@StefanWinkler Almeno non senza unire gli studenti e i loro marchi in un singolo oggetto. – dasblinkenlight

+1

darei +2 se potessi. risposta perfetta + soluzione migliore –

4

Se entrambi hanno la stessa dimensione, avrei scritto:

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

} 
+1

marks è un array int. l'ho corretto –

Problemi correlati