WebN00b Skrevet 9. november 2009 Del Skrevet 9. november 2009 Jah, så var vi igang med en ny oppgave. Siste obligen for dette semesteret. Hybelhus oppgaven. Vel, i "mitt" hybelhus er det visst ingen som får flytte inn fordi alle rommene ser ut til å være opptatt alt. package oblig3hybler; import java.util.Scanner; public class HybelHus { private Hybel[][] hybler = new Hybel[3][5]; int gang = 3; int rom = 5; int valg; private String studentNavn; private int alder; private int tlf; private String tillegg; private String referanser; private Scanner input = new Scanner(System.in); public HybelHus() { for (int g = 0; g < 3; g++) { // ser over etasjer for (int r = 0; r < 5; r++) { // ser over rom hybler[g][r] = new Hybel("1A"); } // end for etg } // end for rom } // end hybel hus Heretter kommer en løkk (switch med do-while løkke i main) som styrer menyen. Den er det ingen problemer med så den legges ikke ut. Videre, problem nummer 1! public void hybelOversikt() { System.out.println("Hybel Leietager"); System.out.println("----- ------------------"); for (int g = 0; g < gang; g++) { for (int r = 0; r < rom; r++) { if (hybler[g][r] != null) { System.out.println(((g + 1) + ('A' + 1)) + " (ledig hybel)"); } // end if-hybel er ledig else { System.out.println((g + 1) + ('A' + 1) + " " + studentNavn); } // end if-hybel ikke er ledig } // end for rom } // end for etasje } // end hybel oversikt metode Output av denne delen av programmet er litt søt igrunn. Ettersom jeg ikke har fått flyttet inn noen er alt ledig i følge denne delen, men romnummeret kommer ikke ut som det skal: Hybel Leietager----- ------------------ 67 (ledig hybel) *klippe ut litt* 68 (ledig hybel) *klippe ut litt* 69 (ledig hybel) *klippe ut litt* Det gjenter 67, 68 og 69 fem ganger etter hverandre siden det er fem rom pr etasje/gang. Hva gjør jeg feil i programmet her siden den ikke klarer å oppgi rom som 1A, 1B osv?? Problem nummer 2: public void nyStudent() { [i]her ber programmet først om navn, alder osv og tar inn det med en input.next() ellr input.nextInt(), men det er først når programmet skal søke etter ledig hybel (og velge første ledige hybel automatisk at problemet kommer):[/i] /** * Søke etter ledige hybler: */ for (int g = 0; g < gang; g++) { for (int r = 0; r < rom; r++) { if (hybler[g][r] != null) { System.out.println("Beklager. Det er ingen ledige hybler!"); } // if det er ledige hybler else { System.out.println("Hybelen " + g + r + " er nå leid ut til " + studentNavn); } // eller det ikke er noe ledig } // end for-etasje } // end for-rom } // end nyStudent metode Outputen her sier 15 ganger at det ikke er noen ledige hybler. Før jeg har flyttet inn en eneste student. Hvor har jeg gått feil her? Jeg skjønner ikke hvorfor disse to problemene dukker opp, men siden de er nesten like antar jeg det kanskje er litt av samme feilen begge steder? Må jeg oppgi student som et eget array i tillegg for å få det til å virke? Siden dette er en oblig som gis år etter år vil jeg helst ikke legge ut mer av koden om det er mulig å unngå. Lenke til kommentar
lhlucky Skrevet 9. november 2009 Del Skrevet 9. november 2009 Til det andre problemet, så må du sjekke om det er en leietager i den gitte hybelen. Som du har det nå vil du kun sjekke om det er et objekt av type "Hybel", og ikke om det bor noen der. Om du for eksempel har en metode, i hybelklassen, getLeietager() { return leietager } som returnerer leietageren til den gitte hybelen, så kan du gjøre noe slikt: if(hybler[g][r].getLeietager() != null) { ... } Slik løste hvertfall jeg den oppgaven i fjor. Håper det var forståelig, ellers får du bare spørre! Lenke til kommentar
WebN00b Skrevet 9. november 2009 Forfatter Del Skrevet 9. november 2009 (endret) Det var jo egentlig veldig logisk. Edit: Og etter at jeg klarte å få samlet hjernen funket det! Takk! Endret 9. november 2009 av WebN00b Lenke til kommentar
delfin Skrevet 9. november 2009 Del Skrevet 9. november 2009 Det var jo egentlig veldig logisk. Edit: Og etter at jeg klarte å få samlet hjernen funket det! Takk! Ser ikke helt hvor du setter hybelen til bokstav etc? Vet ikke hvordan hybel er, men noe i denne gata? int gang; // 0,1,2,3... -> A,B,C... int rom; boolean ledig = true; Student student; public Hybel(int gang, int rom) { this.gang = gang; this.rom = rom; // her kan du f.eks sette: if (gang == 1) student = new Student(); for å teste at hyblene blir tatt... } public override String toString() { Char[] bokstaver = new Char[] { 'A', 'B', ... }; return bokstaver[gang] + rom; // convert litt int til String og gjerne... } public boolean erLedig() { return (student == null); } .... og så i den loopen der du lager dem: for (int g = 0; g < 3; g++) { // ser over etasjer for (int r = 0; r < 5; r++) { // ser over rom hybler[g][r] = new Hybel(g, r); } // end for etg } // end for rom og så for å printe ut ledig eller ikke: // dobbel loop her :) Hybel h = hybler[g][r]; if (h.erLedig()) { sysout h + " er ledig.."; } Mulig det ble litt rot, men ikke så lett å vite hva du har i resten av koden din... Lenke til kommentar
WebN00b Skrevet 14. november 2009 Forfatter Del Skrevet 14. november 2009 (endret) @pifler: Jeg har nå fått rettet hybelnavn-problemene, men jeg får ikke programmet til å slutte å søke etter ledige hybler etter første ledige er funnet. Da slutter det bare å søke i første etasjen og hopper over til neste etasje. Med andre ord leier den ut leilighet A i alle etasjene. Men jeg er mye nærmere en løsning hvertfall. Edit: Post satt som Løst ettersom programmet nå kun finner ledige hybler og ingen opptatte. Endret 14. november 2009 av WebN00b Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå