Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package app;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
- public class Settlement {
- private List<Person> people = new ArrayList<Person>();
- private double total;
- private double idealAmount;
- private List<Person> generous;
- private List<Person> greedy;
- private List<Person> perfect;
- public void addPerson(Person person) {
- people.add(person);
- }
- public int getCount() {
- return people.size();
- }
- private void createLists() {
- total = 0;
- this.generous = new ArrayList<>();
- this.greedy = new ArrayList<>();
- this.perfect = new ArrayList<>();
- for (Person person : people) {
- double paid = person.getPaidAmount();
- total += paid;
- }
- idealAmount = total / people.size();
- for (Person person : people) {
- double paid = person.getPaidAmount();
- if (paid > idealAmount) {
- generous.add(person);
- } else if (paid < idealAmount) {
- greedy.add(person);
- } else {
- perfect.add(person);
- }
- }
- }
- public String calculate() {
- String text = "";
- System.out.println("Test");
- createLists();
- generous.sort(Comparator.comparingDouble(Person::getPaidAmount).reversed()); // Usikker på om den her no e
- // stigande eller synkande
- greedy.sort(Comparator.comparingDouble(Person::getPaidAmount));
- Person perfectPerson = new Person("Perfekt", idealAmount);
- Iterator<Person> genIterator = generous.iterator();
- while (genIterator.hasNext()) {
- System.out.println("Test2");
- Person genPerson = genIterator.next();
- Iterator<Person> greedIterator = greedy.iterator();
- while (greedIterator.hasNext()) {
- System.out.println("Test3");
- Person greedPerson = greedIterator.next();
- double needsPay = genPerson.getPaidAmount() - idealAmount;
- double shouldPay = idealAmount - greedPerson.getPaidAmount();
- if (shouldPay < needsPay) { // greedPerson pays genPerson total shouldPay amount
- text += greedPerson + " må betale " + genPerson + " " + shouldPay + "kr\n";
- needsPay -= shouldPay;
- greedPerson.payMore(shouldPay);
- //greedy.set(greedIterator.nextIndex(), perfectPerson); nvm dis, prøvde et eksperiment med ListIterator
- System.out.println("GreedPerson har betalt meir");
- System.out.println(greedPerson.getPaidAmount());
- if (greedPerson.getPaidAmount() == idealAmount) {
- greedIterator.remove();
- }
- } else if (shouldPay >= needsPay) { // greedPerson pays genPerson the needsPay amount
- text += greedPerson + " må betale " + genPerson + " " + needsPay + "kr\n";
- needsPay = 0;
- shouldPay -= needsPay;
- greedPerson.payMore(needsPay);
- //greedy.set(greedIterator.nextIndex()-1, perfectPerson); samme her, måtte ha -1 på index for at de halvveis skulle fungere, men fekk index out of bounds
- System.out.println("GreedPerson har betalt meir");
- System.out.println(greedPerson.getPaidAmount());
- if (greedPerson.getPaidAmount() == idealAmount) {
- greedIterator.remove();
- }
- }
- if (needsPay == 0) {
- perfect.add(genPerson);
- genPerson.setPaidAmount(idealAmount);
- genIterator.remove();
- break;
- }
- }
- if (perfect.size() == getCount()) {
- System.out.println("Oppgjer Ferdig");
- break;
- }
- }
- return text;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement