2013-10-11 2 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

рассмотрите карту. как hashmap –

+0

Следует отметить, что не очень приятный дизайн для хранения вещей, имеющих ассоциацию в отдельных массивах. Вместо этого вы должны использовать карту или создать простой класс с атрибутами имени и метки и иметь один массив (или список) этих объектов. –

ответ

6

Основополагающий про blem на самом деле заключается в том, что вы должны объединить оба массива вместе и перебрать только один массив.

Вот очень упрощенно демонстрация - вы должны использовать методы получения и установки, и вы должны также использовать 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

Согласовано. Невозможно достичь этого с помощью «foreach» варианта for. –

+0

@StefanWinkler По крайней мере, не без объединения студентов и их меток в один объект. – dasblinkenlight

+1

Я бы дал +2, если мог. идеальный ответ + лучшее решение –

4

Если они оба имеют одинаковый размер, я бы написать:

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

} 
+1

меток - это массив int. я исправил его –

Смежные вопросы