java2 Skrevet 1. april 2007 Skrevet 1. april 2007 (endret) Hei Kunne noen hjelpe meg å finne hvorfor får jeg feil melding når jeg prøver å kjøre den java.lang.NullPointerException at oblig3.HybelHus.<init>(Oblig3.java:207) at oblig3.Oblig3.main(Oblig3.java:130) Exception in thread "main" import java.io.*; import java.util.*; import java.net.URL; class In { // Fields static final String versjon = "ver.3.2 - 2006-08-28"; // Constructors public In() { } public In(String string) { } public In(URL uRL) { } // Methods public void setDelimiter(String string) { } public void resetDelimiter() { } public String getDelimiter() { return null;} public int getLineNumber() { return 0;} public String inLine() { return null;} public String readLine() { return null;} public char inChar() { return '\u0000';} public char inChar(String string) { return '\u0000';} public boolean endOfFile() { return false;} public char nextChar() { return '\u0000';} public boolean hasNextChar() { return false;} public boolean hasNextChar(String string) { return false;} public void skipWhite() { } public void skipSep() { } public void skipSep(String string) { } public String next() { return null;} public String inWord() { return null;} public String inWord(String string) { return null;} public boolean hasNext() { return false;} public boolean hasNext(String string) { return false;} public boolean lastItem(String string) { return false;} public boolean lastItem() { return false;} public boolean inBoolean() { return false;} public boolean inBoolean(String string) { return false;} public boolean hasNextBoolean() { return false;} public boolean hasNextBoolean(String string) { return false;} public byte inByte() { return 0;} public byte inByte(String string) { return 0;} public boolean hasNextByte() { return false;} public boolean hasNextByte(String string) { return false;} public double inDouble() { return 0.0;} public double inDouble(String string) { return 0.0;} public boolean hasNextDouble() { return false;} public boolean hasNextDouble(String string) { return false;} public float inFloat() { return 0f;} public float inFloat(String string) { return 0f;} public boolean hasNextFloat() { return false;} public boolean hasNextFloat(String string) { return false;} public int inInt() { return 0;} public int inInt(String string) { return 0;} public boolean hasNextInt() { return false;} public boolean hasNextInt(String string) { return false;} public long inLong() { return 0L;} public long inLong(String string) { return 0L;} public boolean hasNextLong() { return false;} public boolean hasNextLong(String string) { return false;} public short inShort() { return 0;} public short inShort(String string) { return 0;} public boolean hasNextShort() { return false;} public boolean hasNextShort(String string) { return false;} public boolean ready() { return false;} public void close() { } private void tallfeil(String string) { } private void feil(String string) { } private int numTry() { return 0;} private String getCause(NumberFormatException numberFormatException) { return null;} } class Out { // Fields static final String versjon = "ver.3.2 - 2006-08-28"; // Constructors public Out() { } public Out(String string) { } public Out(String string, boolean _boolean) { } // Methods public void outln() { } public void out(String string) { } public void outln(String string) { } public void out(char _char) { } public void out(char _char, int _int) { } public void outln(char _char) { } public void outln(char _char, int _int) { } public void out(char _char, int _int, int _int2) { } public void outln(char _char, int _int, int _int2) { } public void out(int _int) { } public void outln(int _int) { } public void out(int _int, int _int1) { } public void outln(int _int, int _int1) { } public void out(int _int, int _int1, int _int2) { } public void outln(int _int, int _int1, int _int2) { } public void out(double _double) { } public void outln(double _double) { } public void out(double _double, int _int) { } public void outln(double _double, int _int) { } public void out(double _double, int _int, int _int2) { } public void outln(double _double, int _int, int _int2) { } public void out(double _double, int _int, int _int2, int _int3) { } public void outln(double _double, int _int, int _int2, int _int3) { } public void out(String string, int _int) { } public void outln(String string, int _int) { } public void out(String string, int _int, int _int2) { } public void outln(String string, int _int, int _int2) { } public void out(Object object) { } public void outln(Object object) { } public void close() { } } class Oblig3 { public static void main(String[] args) { HybelHus utsyn = new HybelHus("HaiHus.data"); utsyn.kommandoløkke(); } // avslutter metoden main } // avslutter klassen Oblig3 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class Hybel { Student leietager; int gang; char hybelBokstav; int hybel; // trengs til konvertering fra tall til bokstav String navn; double utestående; Hybel(int gangX, char hybelBokstavX, int hybelX, String navnX, double uteståendeX) { // konstruktør for klassen Hybel gang = gangX; hybel = hybelX; hybelBokstav = hybelBokstavX; navn = navnX; utestående = uteståendeX; leietager = new Student(navn, utestående); // leietager opprettes som et nytt objekt av Klassen Student. Tar imot relevant info } // avslutter konstruktøren for klassen Hybel } // avslutter klassen Hybel //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class Student { double saldo; String navn; Student(String navn, double utestående) { // konstruktør for klassen Student this.navn = navn; /* Kommandoen this gir en peker til innværende objekt * Venstre side er objektvariablen navn * Høyre side er parameter til konstruktøren */ saldo = utestående; } // slutter konstruktøren for klassen Student } // slutter klassen Student //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class HybelHus { In tast = new In(); // økonomi-data settes her for bruk til senere utregning double stromRegLeietager = 0; // settes som en double verdi til senere utregning int totaltAntallMåneder = 0; int antallHybelmånederMedTommeHybler = 0; double totalFortjeneste = 0; Hybel [][] hyblene = new Hybel[4][8]; HybelHus (String filnavn) { // konstruktør for klassen HybelHus In filHaiHus = new In("HaiHus.data"); int a = 0; while (a < 28) { // settes slik at den stopper etter å ha lest 28 linjer String linje = filHaiHus.inLine(); String mønster = (";"); String [] hybelinfo = linje.split(mønster); // koder "lånt" fra side 111 i "Rett på Java" int gang = Integer.parseInt(hybelinfo[0]); char hybelBokstavX = hybelinfo[1].charAt(0); int hybelX = (int) (hybelBokstavX - 'A'); String navn = hybelinfo[2].trim(); double uteståendeX = Integer.parseInt(hybelinfo[3].trim()); /* Forklaring på hva som skal lese fra fil: * 1: Integer.parseInt konverterer tekst til en heltallsverdi (side 109 i "Rett på Java") * 2: [1] definerer plassen den skal leses inn på. * charAt referer til plassen en bokstav står på i en tekststreng * 3: (int) gjør char til en int-verdi, så kalt typekovertering * 4: kommandoen .trim returner en kopi av stringen */ hyblene[gang-1][hybelX] = new Hybel (gang, hybelBokstavX, hybelX, navn, uteståendeX); // oppretter så et nytt objekt av klassen Hybel System.out.println(hyblene[gang-1][hybelX].gang + ";" + hyblene[gang-1][hybelX].hybelBokstav + ";" + hyblene[gang-1][hybelX].navn + ";" + hyblene[gang-1][hybelX].utestående + ";"); a++; // oppdaterer a, slik at den til slutt når 28 gjennomlesninger } // avlsutter while totaltAntallMåneder = filHaiHus.inInt(";"); antallHybelmånederMedTommeHybler = filHaiHus.inInt(";"); totalFortjeneste = filHaiHus.inInt(";"); System.out.println(totaltAntallMåneder + ";" + antallHybelmånederMedTommeHybler + ";" + totalFortjeneste + ";"); /* Skriver så den siste infoen som skal være på HaiHus.data: * - totalt antall mnd programmet har vært i virksomhet * - totalt antall mnd med totalt antall uleide hybler * - total fortjeneste for Ærlige Johans Husleiesystem */ } // avslutter konstruktøren for klassen HybelHus //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void kommandoløkke() { // startet metoden kommandoløkke, som her styrer menyen int valg = 1; // setter valg lik 1 og ikke 0, så ikke programmet avsluttes før det starter;) while (valg != 0) { // kjører while-løkken helt til valg ikke tilsvarer 0 System.out.println(""); System.out.println(" []___ "); System.out.println(" / /\\ "); System.out.println(" /____/__\\ "); System.out.println(" |[][]| | "); System.out.println(" |____|__| "); System.out.println(""); System.out.println(" *** ÆRLIGE JOHANS HUSLEIESYSTEM ***"); System.out.println(""); System.out.println(" Du har følgende valgmuligheter:"); System.out.println(""); System.out.println(" 0.) AVSLUTT"); System.out.println(" 1.) VIS LISTE OVER LEDIGE HYBLER"); System.out.println(" 2.) REGISTRER NY LEIETAGER"); System.out.println(" 3.) REGISTRER FRIVILLIG FLYTTING AV LEIETAGER"); System.out.println(" 4.) MÅNEDSKJØRING AV HUSLEIE MED STRØM"); System.out.println(" 5.) REGISTRER BETALING FRA LEIETAGER"); System.out.println(" 6.) SJEKK OM NOEN LEIETAGERE SKAL KASTES UT"); System.out.println(" 7.) VIS TOTALRAPPORT"); System.out.println(""); System.out.print(" Velg kommando: "); valg = tast.inInt(); switch(valg) { //starter switch-setningen som styrer menyvalgene case 0: // brukerens valg nr.1 System.out.println(""); System.out.println("*** TAKK FOR AT DU TOK TID TIL Å SJEKKE UT ÆRLIGE JOHANS HUSLEIESYSTEM ***"); System.out.println(""); avslutt(); break; case 1: // brukerens valg nr.2 System.out.println(""); System.out.println("*** VIS LISTE OVER LEDIGE HYBLER ***"); System.out.println(""); listeOverLedigeHybler(); break; case 2: // brukerens valg nr.3 System.out.println(""); System.out.println("*** REGISTRER NY LEIETAGER ***"); System.out.println(""); regNyLeietager(); break; case 3: //brukerens valg nr.4 System.out.println(""); System.out.println("*** REGISTRER FRIVILLIG FLYTTING AV LEIETAGER *** "); System.out.println(""); regFlytting(); break; case 4: //brukerens valg nr.5 System.out.println(""); System.out.println("*** MÅNEDSKJØRING AV HUSLEIE MED STRØM ***"); System.out.println(""); mndHusleieMedStrom(); break; case 5: //brukerens valg nr.6 System.out.println(""); System.out.println("*** REGISTRER BETALING FRA LEITAGER ***"); System.out.println(""); regBetaling(); break; case 6: //brukerens valg nr.7 System.out.println(""); System.out.println("*** SJEKK OM NOEN LEIETAGERE SKAL KASTES UT ***"); System.out.println(""); sjekkUtkasting(); break; case 7: //brukerens valg nr.8 System.out.println(""); System.out.println("*** SKRIV TOTALRAPPORT ***"); System.out.println(""); totalRapportForHusleiesystem(); break; default: // dersom brukeren velger et tall som er større enn 7 eller mindre enn 0 System.out.println(""); System.out.println("DU HAR DESVERRE OPPGITT EN UGYLDIG VERDI!"); System.out.println(""); } // avslutter switch } // avslutter while-løkke } // avslutter metoden kommandoløkke //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 0: AVSLUTT //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void avslutt() { Out filHaiHus = new Out("HaiHus.data"); // gjør at infoen skrives til HaiHus.data for (int etg = 0; etg<hyblene.length; etg++) { for (int hyb = 1; hyb<hyblene[etg].length; hyb++) { // doble for-løkker for å løpe gjennom arrayer filHaiHus.outln(hyblene[etg][hyb].gang + ";" + hyblene[etg][hyb].hybelBokstav + ";" + hyblene[etg][hyb].navn + ";" + (int) hyblene[etg][hyb].leietager.saldo + ";"); // skriver info som trengs til HaiHus.data } // avslutter for1 } // avslutter for2 filHaiHus.outln((int) totaltAntallMåneder + ";" + (int) antallHybelmånederMedTommeHybler + ";" + (int) totalFortjeneste + ";"); filHaiHus.close(); // etter all info er skrevet til HaiHus.data lukkes filen } // avslutter metoden avslutt //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 1: VIS LISTE OVER LEDIGE HYBLER //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void listeOverLedigeHybler() { for (int etg = 0; etg<hyblene.length; etg++) { for (int hyb = 1; hyb<hyblene[etg].length; hyb++) { if (hyblene[etg][hyb] != null && hyblene[etg][hyb].navn.equals("TOM HYBEL")) { System.out.println(hyblene[etg][hyb].gang + " - " + hyblene[etg][hyb].hybelBokstav); /* Kravet til if-setningen her er at dersom hybelene ikke er lik null * (kan jo hende den synes det er gøy å rote nedover filen etter blanke tegn), * og tekst-strengen er lik TOM HYBEL, så vises de hybler som innfrir kravene på skjerm * nb! denne if-setningen vil bli flittig brukt utover i oppgaven, og blir derfor ikke nevnt mer */ } // avlsutter if } // avslutter for1 } // avslutter for2 } // avslutter metoden listeOverLedigeHybler //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 2: REGISTRER NY LEIETAGER //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void regNyLeietager() { double innskudd = 0; double forskudd = 8000; // initialiserer de variabler som trengs i denne metoden System.out.println(" --------------------------------------------------------------------------- "); System.out.println("|nb! |"); System.out.println("|Vennligst tast inn riktige verdier ellers vil desverre programmet avslutte |"); System.out.println("|Verdier for gang: 1-4 |"); System.out.println("|Verdier for gang: B-H (stor eller liten bokstav utgjør ingen forskjell) |"); System.out.println(" --------------------------------------------------------------------------- "); System.out.println(""); System.out.print("Oppgi ønsket gang (1-4): "); int etg = tast.inInt(); System.out.print("Oppgi ønsket hybel (B-H): "); tast.skipWhite(); char hyb = tast.inChar(); hyb = Character.toUpperCase(hyb); int hybX = (int) (hyb - 'A'); /* - Kommandoen toUpperCase() gjør at alle inntastede bokstaver blir satt til store bokstaver, * slik at ikke a & A blir tolket som to forskjellige symboler * - Kommandoen skipWhite() dropper enhver carriage return */ System.out.print("Oppgi navnet på ny leietager: "); String navnPaaLeietager = tast.inLine(); System.out.println(""); if (hyblene[etg-1][hybX] != null && hyblene[etg-1][hybX].navn.equals("TOM HYBEL")) { innskudd = hyblene[etg-1][hybX].leietager.saldo + forskudd; // innskudd settes nå som gammel verdi + forskuddet som blir innbetalt hyblene[etg-1][hybX] = new Hybel(etg, hyb, hybX, navnPaaLeietager, innskudd); // oppretter så et nytt objekt av klassen Hybel (slik at konstruktøren tar imot riktig info) System.out.println(navnPaaLeietager + " er nå registrert som eier av hybel " + etg + " - " + hyb); System.out.println("Forskuddet på husleien som er på 8000 uqbarske kr er nå registrert!"); // dersom alt skulle være i orden, vil denne meldingen vises } // avlsutter if1 else { System.out.println("Oppgitte hybel er desverre allerede utleid!"); // dersom hybelen allerede er opptatt, vil denne feilmeldingen vises } // avlsutter else1 totalFortjeneste += 3000; // plusser 3000 uqbarske kroner til den eksisterende verdien av total fortjeneste } // avslutter metoden regNyLeietager //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 3: REGISTRER FRIVILLIG FLYTTING AV LEIETAGER //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void regFlytting() { int ekspedisjonsGebyr = 800; // initialiserer her den variablen som treng i metoden, som er ekspedisjons gebyret System.out.println(" --------------------------------------------------------------------------- "); System.out.println("|nb! |"); System.out.println("|Vennligst tast inn riktige verdier ellers vil desverre programmet avslutte |"); System.out.println("|Verdier for gang: 1-4 |"); System.out.println("|Verdier for gang: B-H (stor eller liten bokstav utgjør ingen forskjell) |"); System.out.println(" --------------------------------------------------------------------------- "); System.out.println(""); System.out.print("Oppgi deres gang (1-4): "); int etg = tast.inInt(); System.out.print("Oppgi deres hybel (B-H): "); tast.skipWhite(); char hyb = tast.inChar(); hyb = Character.toUpperCase(hyb); int hybX = (int) (hyb - 'A'); System.out.print("Oppgi navnet på leietageren: "); String navnPaaLeietager = tast.inLine(); System.out.println(""); if ((navnPaaLeietager).equals(hyblene[etg-1][hybX].navn)) { // kravet til if-setningen her er at leietager må være like oppgitt gang & hybel hyblene[etg-1][hybX].navn = "TOM HYBEL"; // etter flytting er regisrert settes hybelen lik ubebodd igjen System.out.println(navnPaaLeietager + ", har nå flyttet ut fra hybel " + etg + " - " + hyb); hyblene[etg-1][hybX].leietager.saldo -= ekspedisjonsGebyr; // setter her at studentens saldo skal trekke fra ekspedisjons gebyret på 800 uqbarske kr System.out.println("Ekspedisjonsgebyret på 800 uqbarske kr er nå trukket fra kontoen!"); System.out.println("Hybel " + etg + " - " + hyb + " sin nye konto er nå på: " + hyblene[etg-1][hybX].leietager.saldo + " uqbarske kr"); // dersom alt skulle være i orden, vil denne meldingen vises totalFortjeneste += ekspedisjonsGebyr; // ekspedisjonsgebyret betalt for utflyttingen går til den totale fortjenesten } // avslutter if else { System.out.println("Oppgitte hybel tilhører ikke deg, eller så er den ikke utleid!"); // dersom hybelen ikke er registrert på oppgitt info, vil denne feilmeldingen vises } // avlsutter else } // avslutter metoden regFlytting //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 4: MÅNEDSKJØRING AV HUSLEIE MED STRØM //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void mndHusleieMedStrom() { for (int etg = 0; etg<hyblene.length; etg++) { for (int hyb = 1; hyb<hyblene[etg].length; hyb++) { if (hyblene[etg][hyb] != null && hyblene[etg][hyb].navn.equals("TOM HYBEL")) { totalFortjeneste -= 1000; // 1000 uqbarske kr. trekkes fra fortjenesten pr. tomme hybel pr. måned } // avlsutter if else if (hyblene[etg][hyb] != null && ! hyblene[etg][hyb].navn.equals("TOM HYBEL")) { totalFortjeneste += 2000; // 2000 uqbarske kr. legges til fortjenesten for samtlige bebodde hybler hyblene[etg][hyb].leietager.saldo -= 3000; // 3000 uqbarske kr. betales til Ærlige Johan pr. husleie } // avslutter else if } // avlsutter for 1 } // avlsutter for 2 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // leser så inn fra strømregning og beregner husleie etter dette. final double prisPaaStromLysmegopp = 0.8; // Lysmegopp A/S krever 80 uqbarske øre pr. kWh. Settes som final fordi den er endelig final double prisPaaStromJohan = 2; /* Johan krever 2 uqbarske kr. pr. kWh av studentene. * Settes som en double verdi til senere utregning, og final fordi den er endelig */ In filLysregning = new In("Lysregning.data"); while(!filLysregning.lastItem()) { String linjeY = filLysregning.inLine(); String mønster = (":"); String [] lysReginfo = linjeY.split(mønster); int husNr = Integer.parseInt(lysReginfo[0]); int gangY = Integer.parseInt(lysReginfo[1]); char hybelBokstavY = lysReginfo[2].charAt(0); int hybelY = (int) (hybelBokstavY - 'A'); double kWhForbruk = Integer.parseInt(lysReginfo[3]); // samme fremgangsmåte som for innlesning fra HaiHus.data if (hybelY == 0) { // tilsvarer fellesarealet (A) totalFortjeneste -= (prisPaaStromLysmegopp * kWhForbruk); // prisen Ærlige Johan må betale for fellesarealet } // avslutter if else if (hyblene[gangY-1][hybelY] != null && ! hyblene[gangY-1][hybelY].leietager.navn.equals("TOM HYBEL")) { stromRegLeietager = kWhForbruk * prisPaaStromJohan; // det leietagerene må betale for bruk av strøm hyblene[gangY-1][hybelY].leietager.saldo = hyblene[gangY-1][hybelY].leietager.saldo - stromRegLeietager; // oppdaterer så studentenes saldo totalFortjeneste += (prisPaaStromJohan - prisPaaStromLysmegopp) * kWhForbruk; // dette blir da hva Johan tjener på strømmen } // avslutter else if1 else if (hyblene[gangY-1][hybelY] != null && hyblene[gangY-1][hybelY].leietager.navn.equals("TOM HYBEL")) { hyblene[gangY-1][hybelY].leietager.saldo -= (prisPaaStromJohan * kWhForbruk); // prisen blir lagt til den utestående saldoen for ubebodde hybler } // avslutter else if2 } // avslutter while-løkke totaltAntallMåneder += 1; // oppdaterer antall måneder med 1 pr. månedskjøring av husleie System.out.println("Fortjenesten på Ærlige Johans Husleiesystem er nå på: " + totalFortjeneste + " uqbarske kr."); System.out.println("Denne fortjenesten er opptjent over: " + totaltAntallMåneder + " måneder"); System.out.println("I løpet av denne perioden har " + antallHybelmånederMedTommeHybler + " hybler stått tomme"); // dersom alt skulle være i orden, vil denne meldingen vises } // avslutter metoden mndHusleieMedStrom //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 5: REGISTRER BETALING FRA LEIETAGER //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void regBetaling() { System.out.println(" --------------------------------------------------------------------------- "); System.out.println("|nb! |"); System.out.println("|Vennligst tast inn riktige verdier ellers vil desverre programmet avslutte |"); System.out.println("|Verdier for gang: 1-4 |"); System.out.println("|Verdier for gang: B-H (stor eller liten bokstav utgjør ingen forskjell) |"); System.out.println(" --------------------------------------------------------------------------- "); System.out.println(""); System.out.print("Oppgi deres gang (1-4): "); int etg = tast.inInt(); System.out.print("Oppgi deres hybel (B-H): "); tast.skipWhite(); char hyb = tast.inChar(); hyb = Character.toUpperCase(hyb); int hybX = (int) (hyb - 'A'); System.out.print("Oppgi beløpet du vil sette inn (bruk . og ikke , ved komma): "); double regInnbetaling = tast.inDouble(); System.out.println(""); if (hyblene[etg-1][hybX] != null && ! hyblene[etg-1][hybX].navn.equals("TOM HYBEL")) { hyblene[etg-1][hybX].leietager.saldo += regInnbetaling; // oppdaterer leietagerns saldo fra gammel verdi til ny verdi ved den registrerte innbetalingen System.out.println("Betaling er nå registret!"); System.out.println("Registret saldo er nå: " + hyblene[etg-1][hybX].leietager.saldo + " uqbarske kr"); // dersom alt skulle være i orden, vil denne meldingen vises } //avslutter if1 else { System.out.println("Oppgitte hybel er ikke utleid!"); // dersom hybelen allerede er opptatt, vil denne feilmeldingen vises } // avlsutter else } // avlsutter metoden regBetaling //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 6: SJEKK OM NOEN LEIETAGERE SKAL KASTES UT //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void tilkallTorpedo (String hybID, String studentID, double krav) { // setter parameter verdien på metoden til å ta imot info jeg trener til Torpedo.txt Out filTorpedo = new Out("Torpedo.txt", true); filTorpedo.outln(""); filTorpedo.outln("Måned: " + totaltAntallMåneder); filTorpedo.outln("~~~~~~~~~~~"); filTorpedo.outln("Navn: " + studentID + " | hybel: " + hybID + " | krav: " + krav + " uqbarske kr."); filTorpedo.outln(""); filTorpedo.close(); // metoden tar så imot relevant info som skal sendes til torpedoen } // avslutter metoden tilkallTorpedo //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void sjekkUtkasting() { double torpedoGebyr = 1000; // oppretter den variablen jeg trenger i denne metoden, altså torpedo gebyret for (int etg = 0; etg<hyblene.length; etg++) { for (int hyb = 1; hyb<hyblene[etg].length; hyb++) { if (hyblene[etg][hyb] != null && ! hyblene[etg][hyb].navn.equals("TOM HYBEL") && hyblene[etg][hyb].leietager.saldo <= 0) { /* Kravet til if-setningen her er: * At dersom hybelen er eid og konto er lik (eller mindre enn) 0, * finner den ut hvilke studenter som ikke gjør opp for seg */ char hybBokstav = (char) ('A' + hyb); int etgX = etg + 1; // settes for å finne riktig gangnr double krav = (-torpedoGebyr) + hyblene[etg][hyb].leietager.saldo; // oppdaterer gammel saldo til ny verdi når torpedogebyret er trukket fra String hybID = (etgX + " - " + hybBokstav); String studentID = (hyblene[etg][hyb].navn); System.out.println(studentID + " som er registrert som eier av hybel " + hybID + ", med registrert saldo " + hyblene[etg][hyb].leietager.saldo + " må desverre finne seg i å bli kastet ut"); System.out.println(""); // dersom noen studenter ikke har gjort opp for seg, vil denne meldingen vises tilkallTorpedo (hybID, studentID, krav); hyblene[etg][hyb].navn = ("TOM HYBEL"); hyblene[etg][hyb].leietager.saldo = 0; /* Kaller så på metoden tillkallTorpedo (med den parameter verdien den trenger), * setter saldoen til hybel lik 0, og gjør hybelen ledig (ved å kaste studenten ut) */ } // avslutter if } // avslutter for1 } // avslutter for2 } // avslutter metoden sjekkUtkasting //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // case 7: VIS TOTALRAPPORT //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void totalRapportForHusleiesystem() { System.out.println("Ærlige Johans Husleiesystem har så langt inntjent: " + totalFortjeneste + " uqbarske kr."); System.out.println("Ærlige Johans Husleiesystem har vært i virksomhet i: " + totaltAntallMåneder + " måneder"); System.out.println("Ærlige Johans Husleiesystem har i løpet av denne perioden gått glipp av: " + antallHybelmånederMedTommeHybler + " husleier"); // viser den infoen som er mest relevant for Ærlige Johan } // avslutter metoden totalRapportForHusleiesystem //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } // avslutter klassen HybelHus Endret 1. april 2007 av java2
Jørgen Sørheim Skrevet 1. april 2007 Skrevet 1. april 2007 Emnetittelen i denne tråden er lite beskrivende for trådens innhold og det er derfor ingen god emnetittel. Jo bedre og mer beskrivende emnetittelen er, jo lettere er det for andre å skjønne trådens innhold og det vil være lettere å treffe den riktige forumbrukeren med det rette svaret. Ber deg derfor om å endre emnetittel slik at du unngår at en moderator stenger tråden. Vennligst forsøk å tenk på dette neste gang du starter en tråd, og orienter deg om hva vår nettikette sier om dårlig bruk av emnetitler. Bruk -knappen i første post for å endre emnetittelen. Tråden bryter også med tre-ords-regelen. (Dette innlegget vil bli fjernet ved endring av emnetittel. Ikke kommenter dette innlegget, men ta gjerne og dette innlegget når tittelen er endret, så vil det bli fjernet.)
martbo Skrevet 3. april 2007 Skrevet 3. april 2007 Trådstarter har på oppfordring ikke forandret emnefeltet. Tråden stenges!
Anbefalte innlegg