簡體   English   中英

遍歷ArrayList-不打印任何內容

[英]Iterating through ArrayList - not printing anything

所以我需要創建一個ArrayList,只接受那些...

  • “等級”低於85%,
  • 如果“等級”低於85%,請測試其“規定”
  • 如果他們的“調節”> = 0.5,請測試他們的“溝通”
  • 如果他們的“交流”等於“平均”或“優秀”

然后將其添加到列表中

我想這就是我的代碼在做什么,但它沒有打印任何內容。 由於它沒有出現任何錯誤,因此使我相信它並沒有真正遍歷它。 或者它遍歷第一個(不符合條件)並停止,因此將沒有任何可打印的內容。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM