/* * Klassen Plassering er gitt i oppgaveteksten, med unntak av metoden equals() */ import java.util.ArrayList; class Plassering { private int romnr; private int rekkenr; private int plassnr; // i rekken public Plassering(int startRomnr, int startRekkenr, int startPlassnr) { romnr = startRomnr; rekkenr = startRekkenr; plassnr = startPlassnr; } public int finnRomnr() { return romnr; } public int finnRekkenr() { return rekkenr; } public int finnPlassnr() { return plassnr; } public String toString() { return "Romnr " + romnr + ", rekke " + rekkenr + ", plass " + plassnr + ". "; } /* * Vi trenger å sammenlikne plasseringsobjekter. Det mest naturlige er da * å utvide klassen med equals()- eller compareTo()-metode. I denne oppgaven * er det nok med equals(). */ public boolean equals(Object obj) { if (!(obj instanceof Plassering)) return false; if (this == obj) return true; Plassering p = (Plassering) obj; return (romnr == p.romnr && rekkenr == p.rekkenr && plassnr == p.plassnr); } } class Køplass { private String fag; private Plassering plass; //Konstruktør public Køplass(String fag, Plassering plass){ this.fag = fag; this.plass = plass; } //Metoder public String finnFag(){ return fag; } public Plassering finnPlass(){ return plass; } } class Kø { private ArrayList køen = new ArrayList(); //Konstruktør //Metoder //Privat hjelpemetode for å finne om studenten allerede står i køen private boolean finnIKø(Plassering plass, String fag){ for(Køplass k : køen){ if(k.finnFag().equals(fag) && k.finnPlass().equals(plass) ){ return true; } } return false; } public int registrerNyStudentIKøen(String fag, Plassering plass){ if(finnIKø(plass,fag) == false){ køen.add(new Køplass(fag,plass) ); return køen.size(); } return -1; //Om studenten finnes fra før } public Plassering finnNeste(String fag){ for(Køplass k : køen){ if(k.finnFag().equals(fag)){ return k.finnPlass(); } } return null; } public int taUtAvKøen(Plassering plass, String fag){ for (Køplass k : køen) { if(finnIKø(plass,fag) == false){ //Altså han finnes ikke i køa return -1; }else{ køen.remove(k); } } return køen.size(); } } class OppgaveA { public static void main(String[] args) { Kø køen = new Kø(); /* Registrerer to studenter i kø, og prøver også å registrere den siste en gang til (ikke del av oppgaven) */ Plassering plassA = new Plassering(10, 1, 3); Plassering plassB = new Plassering(10, 1, 2); Plassering plassC = new Plassering(10, 1, 2); int pos1 = køen.registrerNyStudentIKøen("Java", plassA); int pos2 = køen.registrerNyStudentIKøen("Java", plassB); int pos3 = køen.registrerNyStudentIKøen("Java", plassC); if (pos1 >= 0) System.out.println(plassA + " er registrert på pos " + pos1); else System.out.println(plassA + " allerede registrert."); if (pos2 >= 0) System.out.println(plassB + " er registrert på pos " + pos2); else System.out.println(plassB + " allerede registrert."); if (pos3 >= 0) System.out.println(plassC + " er registrert på pos " + pos3); else System.out.println(plassC + " allerede registrert."); /* Finner plasseringen til neste student som trenger hjelp */ Plassering neste = køen.finnNeste("Java"); System.out.println(neste); /* Tar ut denne studenten av køen */ if (køen.taUtAvKøen(neste, "Java") != -1) System.out.println("Ut av køen - ok"); else System.out.println("Ut av køen - ikke ok"); /* Prøver en gang til, det skal ikke gå bra */ if (køen.taUtAvKøen(neste, "Java") != -1) System.out.println("Ut av køen - ok"); else System.out.println("Ut av køen - ikke ok"); } }