java2 Skrevet 1. april 2007 Skrevet 1. april 2007 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" package oblig3; /* joakimcs g-26 0-3 k-inf1000/h05 * * ______________________________________[INF 1000]_________________________________________ * _____ _____ _____ _____ _____ * /\ \ /\ \ /\ \ /\ \ /\ \ * /::\ \ /::\ \ /::\____\ /::\ \ /::\ \ * /::::\ \ /::::\ \ /:::/ / /::::\ \ /::::\ \ * /::::::\ \ /::::::\ \ /:::/ / \:::::\ \ /::::::\ \ * /:::/\:::\ \ /:::/\:::\ \ /:::/ / \:::::\ \/::::::::\ \ * /:::/ \:::\ \ /:::/ \:::\ \/:::/ / /::::::\ \::::/\:::\ \ * /:::/ /\:::\ \::::\ /\:::\ \::/ / /::::::::\____\::/ \:::\ \ * /:::/ / \:::\ \::::\/ \:::\ \/ / /:::::::::/ /:/ /\:::\ \ * /:::/ / \:::\ \/\::\ \:::\ \ / /:::::::::/ /:/ /__\:::\ \ * /:::/___/ \:::\____\/\::\ \:::\____\_/ ___ /:::::::/\/____/:/ /\ \:::\____\ * \:::\ \ /:::/ /\ \::\ /:::/ / \ /\ /:::::::/ //:::/___/::\ \::/ / * \:::\ \ /:::/ /\ \ \::\/:::/ / \/::\/:::::::/ / \:::\ \:::\ \/____/ * \:::\ \ /:::/ /::\ \ \:::::/ /\ \::::::::::/ / \:::\ \:::\ \ * \:::\ \/:::/ /::::\ \ \:::/ /::\ \::::::::/ / \:::\ \:::\_____\ * \:::\ /:::/ / \::::\ \/::/ /\:::\ \::::::/ / \:::\ /:::/ / * \:::\/:::/ / \::::\/::/ / \:::\ \::::/___/ \:::\/:::/ / * \::::::/ / \::::::/ / \:::\ \:::\ \ \::::::/ / * \::::/ / \::::/ / \:::\____\:::\___\ \::::/ / * \::/ / \::/ / \::/ /\::/ / \::/ / * \/____/ \/____/ \/____/ \/___/ \/_____/ * * _________________________________________[III]__________________________________________ * //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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
aC Skrevet 1. april 2007 Skrevet 1. april 2007 (endret) HeiKunne 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" 1. Ikke paste stygg kode her med crap indentering. (Bruk pastebin til slikt) 2. Hva skjer på slutten av koden din. Du mangler noe som avslutter den siste klassen Så hvis du vil at folk skal se på koden din og få hjelp, paste den på pastebin og mekk url.. Også husk å få med hele koden når du paster btw ascii art er kult det, men du trenger ikke ta med slikt her når du paster kode, tar egentlig bare plass typooo Endret 1. april 2007 av aC
java2 Skrevet 1. april 2007 Forfatter Skrevet 1. april 2007 Hei Det mangler ikke noe , alt er med i koden HeiKunne 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" 1. Ikke paste stygg kode her med crap indentering. (Bruk pastebin til slikt) 2. Hva skjer på slutten av koden din. Du mangler noe som avslutter den siste klassen Så hvis du vil at folk skal se på koden din og få hjelp, paste den på pastebin og mekk url.. Også husk å få med hele koden når du paster btw ascii art er kult det, men du trenger ikke ta med slikt her når du paster kode, tar egentlig bare plass typooo 8286600[/snapback]
aC Skrevet 1. april 2007 Skrevet 1. april 2007 Dette er kode fra UiO oblig 3 høsten 05 og den tilhører Joakim Clausen Stoltz. Hvis det er deg så har du glemt hva du gjorde på denne obligen for 2 år siden. Eller så anbefaler jeg deg å sende han en mail og spørre om resten av koden.
Patton Skrevet 1. april 2007 Skrevet 1. april 2007 Dette er kode fra UiO oblig 3 høsten 05 og den tilhører Joakim Clausen Stoltz. Hvis det er deg så har du glemt hva du gjorde på denne obligen for 2 år siden. Eller så anbefaler jeg deg å sende han en mail og spørre om resten av koden. 8286948[/snapback] Busted!
java2 Skrevet 1. april 2007 Forfatter Skrevet 1. april 2007 Hei Ja det er meg Joakim , ellers er jeg ikke dum å skrive et annet navn helt øverst Dette er kode fra UiO oblig 3 høsten 05 og den tilhører Joakim Clausen Stoltz. Hvis det er deg så har du glemt hva du gjorde på denne obligen for 2 år siden. Eller så anbefaler jeg deg å sende han en mail og spørre om resten av koden. 8286948[/snapback]
java2 Skrevet 1. april 2007 Forfatter Skrevet 1. april 2007 Hei Jeg prøver å kjører den ,men jeg får den meldingen selv om jeg har filen HaiHus.data : Unable to read from file Nå kjører den http://pastebin.ca/419727 8287347[/snapback]
java2 Skrevet 1. april 2007 Forfatter Skrevet 1. april 2007 Hei Takk den kjører nå , men et problem er at jeg kjører den på min pc , når jeg prøver å taste et alternativ , går det ikke ann å tast noe HeiJeg prøver å kjører den ,men jeg får den meldingen selv om jeg har filen HaiHus.data : Unable to read from file Nå kjører den http://pastebin.ca/419727 8287347[/snapback] 8287676[/snapback]
aC Skrevet 1. april 2007 Skrevet 1. april 2007 Det er fordi den klassen din "In" ikke fungerer som den skal. Og det er ikke min oppgave å kode for deg, for det ville rett og slett blitt litt for enkelt. Det var ikke sånn jeg lærte noe.. men nå skal den gi deg mulighet til å velge. http://pastebin.ca/419842 det er mere problemer tilknyttet klassen nevnt over. Men prøv selv først også post hvis du står fast, men ikke si "det funker ikke" og bare post her. Finn ut hvor det skjærer seg også hvis du ikke skjønner noe av det. Så vurder å spør. Jeg annser denne tråden som løst
java2 Skrevet 1. april 2007 Forfatter Skrevet 1. april 2007 Ja jeg skjønner , men den finner ikke den scanner som du har lagt det til Scanner sc = new Scanner(System.in); Det er fordi den klassen din "In" ikke fungerer som den skal. Og det er ikke min oppgave å kode for deg, for det ville rett og slett blitt litt for enkelt. Det var ikke sånn jeg lærte noe.. men nå skal den gi deg mulighet til å velge. http://pastebin.ca/419842 det er mere problemer tilknyttet klassen nevnt over. Men prøv selv først også post hvis du står fast, men ikke si "det funker ikke" og bare post her. Finn ut hvor det skjærer seg også hvis du ikke skjønner noe av det. Så vurder å spør. Jeg annser denne tråden som løst 8288068[/snapback]
java2 Skrevet 1. april 2007 Forfatter Skrevet 1. april 2007 Bare siste spørsmål hvordan fikk du den til å kjøre når denne feil melding oppsto : java.lang.NullPointerException at oblig3.HybelHus.lesInn(Oblig3.java:277) at oblig3.HybelHus.<init>(Oblig3.java:182) at oblig3.Oblig3.main(Oblig3.java:626) Exception in thread "main Hva gjorde du i kodene ? Ja jeg skjønner , men den finner ikke den scanner som du har lagt det til Scanner sc = new Scanner(System.in); Det er fordi den klassen din "In" ikke fungerer som den skal. Og det er ikke min oppgave å kode for deg, for det ville rett og slett blitt litt for enkelt. Det var ikke sånn jeg lærte noe.. men nå skal den gi deg mulighet til å velge. http://pastebin.ca/419842 det er mere problemer tilknyttet klassen nevnt over. Men prøv selv først også post hvis du står fast, men ikke si "det funker ikke" og bare post her. Finn ut hvor det skjærer seg også hvis du ikke skjønner noe av det. Så vurder å spør. Jeg annser denne tråden som løst 8288068[/snapback] 8288132[/snapback]
aC Skrevet 1. april 2007 Skrevet 1. april 2007 (endret) ahh, jeg byttet ut hvordan man leste fra fil. Ettersom det var den som leverte null pointer (aka peker mot null). Problemet er at klassen du ber lese fra fil og endel andre ting (In klassen) ikke er helt riktig. Men java har native en BufferedReader klasse som jeg brukte istedet.. Du kan se det noe rundt linje 204 i koden Igjen lager du et nytt objekt av klassen in når du skal lese fra tastaturet, og igjen fungerte ikke dette, men her valgte jeg å bruke Scanner klassen som også er native i java.util.* eller noe Endret 1. april 2007 av aC
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å