Avatar billede tuidoi Nybegynder
11. juli 2008 - 17:27 Der er 7 kommentarer og
1 løsning

Hvor er fejlen i min kode?

Hej

Jeg er gået i gang med at lære java som det første objektorrienterede sprog.

Jeg følger lidt nogle opgaver i javabog.dk og nu er jeg nået frem til følgende kode, som jeg poster som en kommentar herunder.

Jeg gætter på fejlen sker idet jeg prøver at indsætte en person i bilen, her er det mikkel der er så heldig at få en tur.. Hehe :)

hvad er det jeg skal rette?

På forhånd tak for hjælpen!
Avatar billede tuidoi Nybegynder
11. juli 2008 - 17:29 #1
BenytBil:

-------------------------------------------------------

public class BenytBil
{
    public static void main(String[] arg)
    {

        System.out.println("Opretter en standard bil og en Ford Mustang.");

        Bil bil1 = new Bil();
        Bil bil2 = new Bil("Ford Mustang", "Blå", 1200, 500000);

        System.out.println("Jeg har nu oprettet følgende biler:");
        System.out.println(bil1);
        System.out.println(bil2);

        System.out.println("Salgspris på escort er: " + bil1.pris() + "DKR. og salgspris på mustang er: " + bil2.pris() + " DKR.");
       
        System.out.println("kører en lang lang tur på 1400km :) i escorten");

        bil1.kør(1400);
       
        System.out.println("Salgspris på escort er: " + bil1.pris() + "DKR. og salgspris på mustang er: " + bil2.pris() + " DKR.");
       
        System.out.println("");
       
        System.out.println("Mikkel J. og Jesper B. sætter sig ind i mustangen");
       
        Person mikkel = new Person("Mikkel","J.",23);
        bil1.enSætterSigInd(mikkel);
       
        Person jesper = new Person("Jesper","B.",45);
        bil2.enSætterSigInd(jesper);
       
        System.out.println("Nu sidder følgende personer i mustangen: " + bil2.hvemSidderIBilen());



    }
}


-------------------------------------------------------

Bil:


--------------------------------------------------------

import java.util.*;

// Klasse der opretter en bil:

public class Bil
{
    public String model;
    public String farve;
    public int antalKmKørt;
    public int nyPris;
    public ArrayList<Person> personer;

    // ------------------- Konstruktører ------------------------ //

    // Standard konstruktør der opretter en standard bil:
    public Bil()
    {
        model = "Ford Escort";
        farve = "Sort";
        antalKmKørt = 0;
        nyPris = 250000;
    }


    // konstruktør der opretter en bil med oplysningerne model, farve, antalKmKørt,nyPris:
    public Bil(String model, String farve, int antalKmKørt, int nyPris)
    {
        this.model = model;
        this.farve = farve;
        this.antalKmKørt = antalKmKørt;
        this.nyPris = nyPris;
    }

    // ------------------- Metoder ------------------------ //

    // metode der får bilen til at køre et vidst antal Km.
    public void kør(int km)
    {
        antalKmKørt = antalKmKørt + km;
    }

    // metode der giver den vurderede salgspris basseret på hvor mange km bilen har kørt:
    public double pris()
    {
        double salgsPris = (nyPris - (antalKmKørt * 5));
        return salgsPris;
    }

    public String toString()
    {
        String beskrivelse = model+ "(" +farve+ ") har kørt: " +antalKmKørt+ "km. - ny pris: " +nyPris+ " DKR.";
        return beskrivelse;
    }

    public void enSætterSigInd(Person p)
    {
        personer.add(p);
    }
   
    public void enStigerUd(Person p)
    {
        personer.remove(p);
    }
   
    public void alleStigerUd()
    {
        personer.clear();
    }

    public String hvemSidderIBilen()
    {
        String SidderDer = "";
       
        for (Person p : personer)
        {
            SidderDer = SidderDer + p.toString();
        }
       
        return SidderDer;

    }
   
}

-----------------------------------------------------------

Person:

import java.util.*;

public class Person
{
    public String fornavn;
    public String efternavn;
    public int alder;
       
    public Person(String fornavnP, String efternavnP, int alderP)
    {
        fornavn = fornavnP;
        efternavn = efternavnP;
        alder = alderP;
    }
   
    public String toString()
    {
        return fornavn+" "+efternavn+" ("+alder+") år";
    }
   
    public void præsentation(Person andenPerson)
    {
        if (alder < 5) System.out.print("ma ma..");
        else if (alder > 60) System.out.print("Hej "+andenPerson.fornavn+". ");
        else System.out.print("Goddag, hr. "+andenPerson.efternavn+". ");
    }
   
}


--------------------------------------------------------

Hvis der er en bedre måde at poste koden på så bare sig til :)

tak for jeres tid!
Avatar billede pidgeot Nybegynder
11. juli 2008 - 17:55 #2
Hvilken fejl får du?
Avatar billede tuidoi Nybegynder
11. juli 2008 - 18:13 #3
Jeg får denne besked i Jbuilder:

Exception in thread "main" java.lang.NullPointerException
    at Bil.enSætterSigInd(Bil.java:57)
    at BenytBil.main(BenytBil.java:29)


I linje 57 i Bil står der:
personerIBilen.add(p);

og i linje 29 i BenytBil står der:
bil1.enSætterSigInd(mikkel);

Men ved ikk helt hvordan jeg skal løse problemet?
Avatar billede pidgeot Nybegynder
11. juli 2008 - 18:19 #4
I din constructor til Bil skal du oprette en instans af din ArrayList med new. Før kan du ikke lægge noget ind i den.
Avatar billede tuidoi Nybegynder
11. juli 2008 - 18:25 #5
Mange Tak for hjælpen :) føler mig lidt dum nu, men det er godt for nu glemmer jeg det nok ikke lige foreløbig..
Avatar billede pidgeot Nybegynder
11. juli 2008 - 18:46 #6
Det kunne i øvrigt være en fordel for dig hvis du i stedet for to constructorer "viderestilte" din default-constructor til den anden:

public Bil()
{
    this("Ford Escort","Sort",0,250000);
}

Det er mere et tip til når du skal i gang med noget med mere kød på - på denne måde behøver du ikke skrive den samme kode to gange (du kan nøjes med at initialisere den i den "sidste" constructor, fordi den bliver kaldt af de andre).
Avatar billede pidgeot Nybegynder
11. juli 2008 - 18:46 #7
Og det skulle have været et svar.
Avatar billede tuidoi Nybegynder
11. juli 2008 - 20:58 #8
Ja det har du ret i. det gør det lidt smartere.. mange tak for hjælpen! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester