/*
* 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øplass> køen = new ArrayList<Køplass>();
//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");
}
}