矢量/泛型搜索java

时间:2014-04-15 23:59:44

标签: java generics vector

为什么我总是得到'0'作为答案,我做错了什么?

我怀疑这个错误与HistAndMarks方法有关。我正在尝试做的是搜索两个向量并计算两者中有多少名称。

由于

public class Ex6 {

public static void main(String[] a) {
    Vector<Patient> P = new Vector<Patient>();
    Vector<Student> S = new Vector<Student>();
    int i = Integer.parseInt(a[0]);
    if (i == 0) {
        P.add(new Patient("Jimmy1", "1", "d"));
        P.add(new Patient("Jimmy2", "1", "d"));
        P.add(new Patient("Jimmy3", "1", "d"));
        P.add(new Patient("Jimmy", "1", "d"));
        S.add(new Student("Jimmy1", "1", null));
        S.add(new Student("Jimmy2", "1", null));
        S.add(new Student("Jimmy3", "1", null));
        S.add(new Student("Lisa", "1", null));
        System.out.println(new Ex6().HistAndMarks(P, S));
    }
    if (i == 1) {
        P.add(new Patient("Jimmy", "1", "d"));
        S.add(new Student("Jimmy1", "1", null));
        System.out.println(new Ex6().HistAndMarks(P, S));
    }
    if (i == 2)
        System.out.println(new Ex6().HistAndMarks(P, null));
}

public static int HistAndMarks(Vector<Patient> P, Vector<Student> S) {
    int count = 0;
    try {
        for (Student students : S) {
            for (Patient patients : P) {
                if (S.contains(P)) {
                    count++;
                }

            }
        }
    } catch (NullPointerException e) {
        System.out.println("Error");
        System.exit(0);
        return 0;
    }
    return count;
}
}

1 个答案:

答案 0 :(得分:1)

在这里,您将迭代集合,但不使用您迭代的元素。

for (Student students : S) {
    for (Patient patients : P) {
        if (S.contains(P)) {
            count++;
        }
    }
}

studentspatients应该是单数,因为它们只代表集合SP中的一个元素。

根据你所说的你想做的事,你应该用以下方式替换你的循环:

for (Student student : S) {
    for (Patient patient : P) {
        if (student.getName().equals(patient.getName())) {
            count++;
        }
    }
}

<强>更新

这种for循环被称为&#34;增强了循环&#34;。它只是一种编写循环来迭代集合的简单方法。

for (Student student : S) {
    // some code using the variable 'student'
}

与你写的完全一样:

Iterator<Student> it = S.iterator();
while (it.hasNext()) {
    Student student = it.next();
    // some code using the variable 'student'
}

使用数组理解起来更简单。如果String[] tab;在某处声明:

for (String s : tab) {
    System.out.println(s);
}

相当于:

for (int i = 0; i < tab.length; i++) {
    System.out.println(tab[i]);
}