2013-10-11 52 views
6

學生的名稱(String [])和相應的標記(int [])存儲在不同的數組中。同時使用Java中的每個循環對兩個數組進行迭代

如何在Java中使用每個循環來迭代兩個數組?

void list() { 

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

一個微不足道的方法可能是在同一個循環中使用索引變量。有沒有好的方法?

+0

爲什麼是正常的(一個索引變量) 還不夠好? –

+0

考慮一張地圖。 like hashmap –

+0

應該指出的是,將單個數組中的關聯事物保存起來並不是很好的設計。相反,您應該使用映射或創建一個帶有名稱和標記屬性的簡單類,並且具有這些對象的單個數組(或列表)。 –

回答

6

底層親blem實際上是你應該將兩個數組綁定在一起並遍歷一個數組。

這是一個非常簡單的演示 - 你應該使用getter和setter,你也應該使用List而不是數組,但這說明了這一點:

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

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

您需要使用常規for環路以指數做到這一點,就像這樣:

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

更好的辦法是使用一類的學生存儲與他/她的標誌,像這樣一起:

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

同意。使用for的「foreach」變體無法實現此目的。 –

+0

@StefanWinkler至少不是將學生和他們的標記合併成一個對象。 – dasblinkenlight

+1

如果可以,我會給+2。完美答案+更好的解決方案 –

4

如果他們都具有相同的尺寸,我會寫:

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

} 
+1

標記是一個int數組。我糾正了它 –

相關問題