2015-11-16 38 views
0

所以我需要的,如果「品位」是少創建一個ArrayList,將只需要考生是誰的......通過迭代ArrayList的 - 不打印任何東西

  • 「品位」小於85%,
  • 超過85%,測試它們的 '調節'
  • 如果他們的 '規則'> = 0.5,測試它們的 '通信'
  • 如果他們的 '通信' 等於 '平均' 或 '優'

然後將它添加到列表

我想這就是我的代碼在做什麼,但它沒有打印任何東西。由於它沒有出現任何錯誤,所以它讓我相信它並沒有真正重複它。或者它通過第一個(不符合標準)迭代並停止,所以它不會有任何要打印的東西。我查了一些其他的例子,並嘗試實施和改變一些東西,但它仍然不起作用。對我來說,它看起來應該工作,所以我不知道要改變什麼。

任何建議,將認真感激!

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

} 

} 
+1

我的建議是進行調試,看看它在做什麼自己 –

+0

爲什麼你有一個'時'在'for'裏面?如果分數低於85,這將是一個無止境的循環。 – RealSkeptic

回答

1

它停止,因爲

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),它永遠不會改變的狀況,打破了循環的價值。這將是一個無止境的循環。您需要更改到一個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); 
      } 
     } 
    } 
} 
+0

啊菜鳥的錯誤,感謝您的描述,我改變了它,它的工作原理! – CheyBateman

0

一旦你的代碼進入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); 
     } 
    } 
0

它應該是:

if ((i.getGrade() < 85) && 
    (i.getRegulation() >= 0.5) && 
    (i.getCommunication().equals("average") || i.getCommunication().equals("excellent"))) { 
     person = i; 
     eligibleCandidates.add(i); 
    } 
    } 
} 

...而不是while ...

+0

使用&&操作符或爲每個操作符創建一個新的if語句是否更好? – CheyBateman

+0

這取決於具體情況,你如何閱讀它以及條件是如何執行的:順序,每一行中的行,等等 –