[英]Iterating through an ArrayList of Objects and printing each variable from each object
[英]Iterating through ArrayList - not printing anything
所以我需要创建一个ArrayList,只接受那些...
然后将其添加到列表中
我想这就是我的代码在做什么,但它没有打印任何内容。 由于它没有出现任何错误,因此使我相信它并没有真正遍历它。 或者它遍历第一个(不符合条件)并停止,因此将没有任何可打印的内容。 Ive查找了其他示例,并尝试实现和更改一些内容,但仍然无法正常工作。 对我来说,它似乎应该工作,所以我不知道要更改什么。
任何建议将不胜感激!
import java.util.ArrayList;
public class Candidate extends AddressBook {
private boolean innovation;
private double grade;
private double regulation;
private String communication;
public Candidate(String fn, String ln, double grade, String comm,
boolean innov, double reg) {
super(fn, ln);
this.grade = grade;
this.communication = comm;
this.innovation = innov;
this.regulation = reg;
}
public boolean isInnovative() {
return innovation;
}
public double getGrade() {
return grade;
}
public double getRegulation() {
return regulation;
}
public String getCommunication() {
return communication;
}
public static ArrayList<Candidate> getEligibleCandidates(Candidate[] cands) {
ArrayList<Candidate> eligibleCandidates = new ArrayList<Candidate>();
Candidate person = cands[0];
for (Candidate i : cands) {
while (i.getGrade() < 85) {
if (i.getRegulation() >= 0.5) {
if (i.getCommunication().equals("average")
|| i.getCommunication().equals("excellent")) {
person = i;
eligibleCandidates.add(i);
}
}
}
}
return eligibleCandidates;
}
public void setCommunication(String comm) {
this.communication = comm;
}
public void setGrade(double grade) {
this.grade = grade;
}
public void setInnovation(boolean innov) {
this.innovation = innov;
}
public void setRegulation(double reg) {
this.regulation = reg;
}
public static void main(String[] args) {
Candidate r1 = new Candidate("Elena", "Brandon", 82.30, "poor", true,
0.5);
Candidate r2 = new Candidate("Thomas", "Molson", 85.10, "poor", false,
1.0);
Candidate r3 = new Candidate("Hamilton", "Winn", 77.77, "average",
false, 0.8);
Candidate r4 = new Candidate("Suzie", "Sarandin", 69.93, "average",
false, 0.0);
Candidate r5 = new Candidate("Philip", "Winne", 93.03, "average", true,
1.0);
Candidate r6 = new Candidate("Alex", "Trebok", 88.61, "poor", true, 0.7);
Candidate r7 = new Candidate("Emma", "Pivoto", 55.99, "excellent",
false, 0.8);
Candidate r8 = new Candidate("John", "Lenthen", 87.49, "excellent",
true, 0.9);
Candidate r9 = new Candidate("James", "Lean", 88.00, "excellent",
false, 0.5);
Candidate r10 = new Candidate("Jane", "Ostin", 91.20, "average", true,
0.6);
Candidate r11 = new Candidate("Emily", "Car", 66.79, "excellent",
false, 0.3);
Candidate r12 = new Candidate("Daniel", "", 76.65, "average", true, 0.2);
Candidate r13 = new Candidate("Neda", "Bazdar", 55.89, "excellent",
true, 0.5);
Candidate r14 = new Candidate("Aaron", "Smith", 90.01, "excellent",
false, 0.3);
Candidate r15 = new Candidate("Kate", "Hen", 87.9, "poor", false, 0.8);
Candidate[] cands = { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11,
r12, r13, r14, r15 };
ArrayList<Candidate> people = Candidate.getEligibleCandidates(cands);
System.out.println(people);
}
}
它停止了,因为
for (Candidate i : cands) {
while (i.getGrade() < 85) {
if (i.getRegulation() >= 0.5) {
if (i.getCommunication().equals("average")
|| i.getCommunication().equals("excellent")) {
person = i;
eligibleCandidates.add(i);
}
}
}
}
考虑一下它一旦进入(i.getGrade()<85),它就不会更改条件的值以使其脱离循环。 这将是无穷无尽的for循环。 您需要将其更改为if语句
for (Candidate i : cands) {
if (i.getGrade() < 85) {
if (i.getRegulation() >= 0.5) {
if (i.getCommunication().equals("average")
|| i.getCommunication().equals("excellent")) {
person = i;
eligibleCandidates.add(i);
}
}
}
}
一旦您的代码进入while (i.getGrade() < 85)
它就永远不会退出。 那应该是一个if
检查,而不是一个循环。 在该loop
内,您永远不会更改要检查的人,因此一旦它成为真,它将永远永远为真。
例如,使用“ Elena”,将执行循环并检查is Elena's grade < 85?
。 既然如此,它将进入循环。 然后,一旦循环完成处理,它将返回循环顶部并检查, is Elena's grade STILL less than 85?
,这是正确的,因为它从未在循环中更改过。
您应该使用if
检查,如下所示。
for (Candidate currentCandidate : cands) {
if(currentCandidate.getGrade()<85 && currentCandidate.getRegulation() >= 0.5 && (currentCandidate.getCommunication().equals("average") || currentCandidate.getCommunication().equals("excellent"))){
eligibleCandidates.add(currentCandidate);
}
}
它应该是:
if ((i.getGrade() < 85) &&
(i.getRegulation() >= 0.5) &&
(i.getCommunication().equals("average") || i.getCommunication().equals("excellent"))) {
person = i;
eligibleCandidates.add(i);
}
}
}
...而不是while ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.