2015-11-16 4 views
0
не печатает

Поэтому мне нужно создать ArrayList, который будет только принимать кандидатов, которые в ...Итерация через ArrayList - ничего

  • «класс» меньше, чем 85%,
  • если «класс» меньше чем на 85%, проверить их «регулирование»
  • , если их «регулирование»> = 0,5, проверить их «связь»
  • , если их «связь» равно «средний» или «отлично»

Затем добавьте это в список

Я THUUHHT это то, что делал мой код, но его ничего не печатали. Поскольку он не придумывает никаких ошибок, это заставляет меня поверить, что это не так уж итеративно. Или его повторение по первому (что не соответствует критериям) и останавливается, поэтому ему нечего печатать. 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); 

} 

} 
+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) он никогда не изменяет значение условия, чтобы выйти из цикла. Это будет бесконечный цикл. вам нужно изменить, что если заявление

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

Ошибка Ahh rookie, спасибо за описание, я изменил его, и он работает! – 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

Это зависит от ситуации, как вы ее читаете и как должны выполняться условные обозначения: порядок, строки в каждом и т. Д. –

Смежные вопросы