为什么我总是得到'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;
}
}
答案 0 :(得分:1)
在这里,您将迭代集合,但不使用您迭代的元素。
for (Student students : S) {
for (Patient patients : P) {
if (S.contains(P)) {
count++;
}
}
}
students
和patients
应该是单数,因为它们只代表集合S
和P
中的一个元素。
根据你所说的你想做的事,你应该用以下方式替换你的循环:
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]);
}