import java.util.Random; import java.util.ArrayList; import java.util.concurrent.CountDownLatch; public class Barn implements Runnable{ private String navn; private Barnehage barnehage; ArrayList leker; private final int MAX_LEKER = 4; CountDownLatch cdl; Barn(String navn, ArrayList leker, Barnehage barnehage, CountDownLatch cdl){ this.navn = navn; this.leker = leker; this.barnehage = barnehage; this.cdl = cdl; } //Run skal fungere slik at et barn leker med leker 30 ganger i l?pet av en dagen public void run(){ for (int i = 0; i < 30; i++) { byttLeke(); } cdl.countDown(); //Signaliser at du er ferdig. } //Metoden skal fungere slik at et barn velger om den vil ta en ny leke, eller gi tilbake. //Om lekelisten til barnet er fullt, SKAL barnet gi en leke til barnehagen //Om listen er tom, SKAL barnet ta en leke fra barnehagen //Om barnet har noen leker, men ikke max, skal metoden ta() avgj?re om barnet tar eller gir en leke. public void byttLeke(){ if(leker.size() >= MAX_LEKER){ String gir = leker.remove(0); barnehage.giLeke(gir, this); }else if(leker.isEmpty()){ leker.add(barnehage.laanLeke(this)); }else{ if(ta()){ leker.add(barnehage.laanLeke(this)); }else{ String gir = leker.remove(0); barnehage.giLeke(gir, this); } } lek(); } public void lek(){ Random r = new Random(); try{ Thread.sleep(r.nextInt(2000)); }catch(InterruptedException e){ } } //De f?lgende metodene er ferdig skrevet. //Hjelpemetode. Gir ca 50/50 sjangs public boolean ta(){ Random r = new Random(); try { //Denne kan reduseres under debugging Thread.sleep(r.nextInt(10000)); // hmmmm } catch (InterruptedException e) {} if(r.nextInt() % 2 == 0){ return true; } return false; } public String getNavn(){ return navn; } public ArrayList getLeker(){ return leker; } public Barnehage getBarnehage(){ return barnehage; } }