在Java中使用for-each循环同时迭代两个数组

在Java中使用for-each循环同时迭代两个数组,java,foreach,Java,Foreach,学生的姓名(字符串[])和相应的标记(int[])存储在不同的数组中 如何在Java中使用for each循环一起迭代两个数组 void list() { for(String s:studentNames) { System.out.println(s); //I want to print from marks[] alongside. } } 一种简单的方法是在同一个循环中使用索引变量。有什么好方法吗?您需要使用带有索引的常规for循环来执行此操作,如下

学生的姓名(字符串[])和相应的标记(int[])存储在不同的数组中

如何在Java中使用for each循环一起迭代两个数组

void list() {

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

一种简单的方法是在同一个循环中使用索引变量。有什么好方法吗?

您需要使用带有索引的常规
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());
}
更好的方法是使用类存储学生及其分数,如下所示:

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

如果它们的尺寸相同,我会写:

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

}

for(int i=0;i的根本问题实际上是,您应该将两个数组绑定在一起,并只在一个数组上迭代

这里是一个非常简单的演示-您应该使用getter和setter,还应该使用
列表
而不是数组,但这说明了一点:

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

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

另一种方法是使用verboseforloop语句,例如

int i,j;
for(i = 0, j=0; i<= student.length-1 && j <=grades.length-1; i++,j++)
{
...
}
inti,j;

对于(i=0,j=0),为什么是(一个具有索引变量的)不够好?考虑一个映射。像HasMaMIT应该注意到,在单独的数组中保持关联的东西不是很好的设计。相反,你应该使用一个映射或者创建一个带有名称和标记属性的简单类,并且有一个数组(或列表)。这两个数组并行工作,它们唯一的关联是通过索引(因此您不能使用增强的for循环,因为您需要知道索引)Stefan正确地指出,这是一个非常糟糕的设计,它提供的灵活性非常小,我认为它从来没有在任意示例之外使用过。像OP一样,我很失望没有更聪明的方法来实现它,例如
for(String s:studentNames,int g:grades){…}
同意。使用“foreach”无法实现这一点for的变体。@StefanWinkler至少不能不将学生和他们的分数合并成一个对象。如果可以的话,我会给出+2。完美答案+更好的解决方案。我不敢相信一些教育机构教OO语言,然后给出这样的例子(re:OP)。首先是对象(这个答案+1)您可以只使用一个变量
i
。永远不会出现
i!=j
的情况。在这种情况下,它并不冗长,而且确实是正确的方法。