Advertisement
Guest User

lorgi

a guest
Feb 18th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.44 KB | None | 0 0
  1. package app;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Comparator;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.ListIterator;
  8.  
  9. public class Settlement {
  10.  
  11.     private List<Person> people = new ArrayList<Person>();
  12.  
  13.     private double total;
  14.     private double idealAmount;
  15.  
  16.     private List<Person> generous;
  17.     private List<Person> greedy;
  18.     private List<Person> perfect;
  19.    
  20.  
  21.     public void addPerson(Person person) {
  22.         people.add(person);
  23.     }
  24.    
  25.  
  26.     public int getCount() {
  27.         return people.size();
  28.     }
  29.  
  30.     private void createLists() {
  31.         total = 0;
  32.         this.generous = new ArrayList<>();
  33.         this.greedy = new ArrayList<>();
  34.         this.perfect = new ArrayList<>();
  35.  
  36.         for (Person person : people) {
  37.             double paid = person.getPaidAmount();
  38.             total += paid;
  39.  
  40.         }
  41.        
  42.         idealAmount = total / people.size();
  43.        
  44.         for (Person person : people) {
  45.             double paid = person.getPaidAmount();
  46.             if (paid > idealAmount) {
  47.                 generous.add(person);
  48.             } else if (paid < idealAmount) {
  49.                 greedy.add(person);
  50.             } else {
  51.                 perfect.add(person);
  52.             }
  53.         }
  54.        
  55.        
  56.  
  57.     }
  58.  
  59.     public String calculate() {
  60.         String text = "";
  61.        
  62.         System.out.println("Test");
  63.         createLists();
  64.         generous.sort(Comparator.comparingDouble(Person::getPaidAmount).reversed()); // Usikker på om den her no e
  65.                                                                                         // stigande eller synkande
  66.         greedy.sort(Comparator.comparingDouble(Person::getPaidAmount));
  67.        
  68.         Person perfectPerson = new Person("Perfekt", idealAmount);
  69.  
  70.         Iterator<Person> genIterator = generous.iterator();
  71.         while (genIterator.hasNext()) {
  72.             System.out.println("Test2");
  73.             Person genPerson = genIterator.next();
  74.            
  75.             Iterator<Person> greedIterator = greedy.iterator();
  76.             while (greedIterator.hasNext()) {
  77.                 System.out.println("Test3");
  78.                 Person greedPerson = greedIterator.next();
  79.  
  80.                 double needsPay = genPerson.getPaidAmount() - idealAmount;
  81.                 double shouldPay = idealAmount - greedPerson.getPaidAmount();
  82.  
  83.                 if (shouldPay < needsPay) { // greedPerson pays genPerson total shouldPay amount
  84.                    
  85.                     text += greedPerson + " må betale " + genPerson + " " + shouldPay + "kr\n";
  86.  
  87.                     needsPay -= shouldPay;
  88.                     greedPerson.payMore(shouldPay);
  89.                     //greedy.set(greedIterator.nextIndex(), perfectPerson); nvm dis, prøvde et eksperiment med ListIterator
  90.                     System.out.println("GreedPerson har betalt meir");
  91.                     System.out.println(greedPerson.getPaidAmount());
  92.                    
  93.                     if (greedPerson.getPaidAmount() == idealAmount) {
  94.                        
  95.                         greedIterator.remove();
  96.                     }
  97.  
  98.                 } else if (shouldPay >= needsPay) { // greedPerson pays genPerson the needsPay amount
  99.                    
  100.                     text += greedPerson + " må betale " + genPerson + " " + needsPay + "kr\n";
  101.  
  102.                     needsPay = 0;
  103.                     shouldPay -= needsPay;
  104.                     greedPerson.payMore(needsPay);
  105.                     //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
  106.                     System.out.println("GreedPerson har betalt meir");
  107.                     System.out.println(greedPerson.getPaidAmount());
  108.                    
  109.                     if (greedPerson.getPaidAmount() == idealAmount) {
  110.                         greedIterator.remove();
  111.                     }
  112.  
  113.                 }
  114.  
  115.                 if (needsPay == 0) {
  116.                     perfect.add(genPerson);
  117.                     genPerson.setPaidAmount(idealAmount);
  118.                     genIterator.remove();
  119.                     break;
  120.                    
  121.                 }
  122.             }
  123.            
  124.             if (perfect.size() == getCount()) {
  125.                 System.out.println("Oppgjer Ferdig");
  126.                 break;
  127.             }
  128.         }
  129.         return text;
  130.     }
  131.    
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement