Gå til innhold

java lang NullPointerException


Anbefalte innlegg

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


Lenke til kommentar
Videoannonse
Annonse
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"

 

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

 

:D:D

 

typooo

Endret av aC
Lenke til kommentar

Hei

Det mangler ikke noe , alt er med i koden

 

 

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"

 

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

 

:D:D

 

typooo

8286600[/snapback]

Lenke til kommentar

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.

Lenke til kommentar
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! :D

Lenke til kommentar

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]

Lenke til kommentar

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

 

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]

8287676[/snapback]

Lenke til kommentar

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

Lenke til kommentar

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]

Lenke til kommentar

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]

Lenke til kommentar

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 av aC
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...