Avatar billede changelevel Nybegynder
26. januar 2012 - 02:04 Der er 18 kommentarer og
1 løsning

Forløkke problemer

hej,
jeg vil gerne have toString metoder regner de to drikkerVarer ud? og lagt priserne sammen.

f.esk. cola, nr 1, pris: 200;
      sprite, nr 2, pris 200; 
                I alt  : 400 kr;   

Men får fejlen uanset hvad jeg gør-
Nogle her kan hjælpe :D



public class DrikkeVarer {

    private String navn;
    private int nr;
    private double pris;
    private ArrayList<DrikkeVarer>drikkeList;

    public DrikkeVarer(){
       
        opretteDrikkeVarer();
    }


    public DrikkeVarer(String navn, int nr, double pris){

        this.navn = navn;
        this.nr = nr;    
        this.drikkeList = new ArrayList();

    }

    public  void opretteDrikkeVarer(){

        DrikkeVarer a = new DrikkeVarer("Cola",1,200);
        drikkeList.add(1,a);

        DrikkeVarer b = new DrikkeVarer("Sprite",2,200);
        drikkeList.add(2,b);       

    }
   

    public String toString(){

    double sum = 0;
    String res ="";
   
    res = "du har købt følgende"+ navn + "og nr er" + nr + "og den koster" + pris;
       
        for (int i = 0; i < drikkeList.size(); i++) {
           
            sum = sum + drikkeList.get(1).pris;
            sum = sum + drikkeList.get(2).pris;               
        }
               
    return res + sum;
    }

    public static void main(String[] args) {

        DrikkeVarer d = new DrikkeVarer();
        d.toString();
               
    }
   
}
Avatar billede arne_v Ekspert
26. januar 2012 - 02:12 #1
Du faar hvilken fejl??
Avatar billede arne_v Ekspert
26. januar 2012 - 02:14 #2
Lidt blandede kommentarer:

1)


for (int i = 0; i < drikkeList.size(); i++) {
         
            sum = sum + drikkeList.get(1).pris;
            sum = sum + drikkeList.get(2).pris;             
        }

du bruger ikke loekke variabelen i indeni loekken - mener du det??

2)

Skal:

d.toString();

vaere:

System.out.println(d.toString());

??
Avatar billede arne_v Ekspert
26. januar 2012 - 02:14 #3
Jeg tror ogsaa at du skal have adskilt DrikkeVare og DrikkeVareList !!
Avatar billede changelevel Nybegynder
26. januar 2012 - 02:25 #4
Jeg får NullPointerException uanset om jeg bruger den loekke eller ej...?

Exception in thread "main" java.lang.NullPointerException
    at dk.knord.DrikkeVarer.opretteDrikkeVarer(DrikkeVarer.java:29)
    at dk.knord.DrikkeVarer.<init>(DrikkeVarer.java:14)
    at dk.knord.DrikkeVarer.main(DrikkeVarer.java:55)
Avatar billede changelevel Nybegynder
26. januar 2012 - 02:27 #5
jeg havde også regne med at have adskilt DrikkeVare og DrikkeVareList og udvider programmet... men vil bare lige afprøve metoder om de overhovedet virker med loekke
Avatar billede arne_v Ekspert
26. januar 2012 - 02:40 #6
1) main  DrikkeVarer d = new DrikkeVarer();

2) public DrikkeVarer(){
     
        opretteDrikkeVarer();
    }

3) public  void opretteDrikkeVarer(){

        DrikkeVarer a = new DrikkeVarer("Cola",1,200);
        drikkeList.add(1,a);

Her maa drikkeList altsaa vaere null da den ikke har faaet en vaerdi.
Avatar billede arne_v Ekspert
26. januar 2012 - 02:40 #7
saa problemet er faktisk relateret til DrikkeVare vs DrikkeVareList
Avatar billede kiksen1987 Novice
26. januar 2012 - 07:43 #8
1:
Hvorfor når du adder på din lister skriver du 1,a og 2,b istedet for bare list.add(a) og list.add(b)

Som også nævn før, så ville jeg lave 2 klasser istedet for at samle det hele i en.

Drikkevare - Til at have alt for den enkelte drink
Drikkevarer - Til alt det med listen at gøre

dvs Drikkevarer indholder en masse Drikkevare.

Derudover laver du en For løkke uden at bruge den?

for (int i = 0; i < drikkeList.size(); i++) {       
            sum = sum + drikkeList.get(i).pris;         
}

Jeg ville kun have 1 linie inde i forløkken. Fordi ellers ville du få forkert sum for den bliver jo kørt ligeså mange gange som du har items i listen.


-----FEJLEN------

der hvor du får fejlen er nok:
res = "du har købt følgende"+ navn + "og nr er" + nr + "og den koster" + pris;

du har ingen steder noget der hedder #navn# eller #nr#.
Hvorfor er de tomme spørger du nok?

det er fordi du kalder metoden på

DrikkeVarer d = new DrikkeVarer();

som er i din main metode.

og ingen steder giver du d nogen værdier. Så den er bare tom.
igen her en god grund for at dele det lidt op.

den kan ikke finde din cola og sprite du har lavet. For de er ikke i Drikkevarer, men i Drikkevarer arraylist.

dvs hvis du vil have dem ud, så skal du have din #res# ind i for løkken, så den ser sådan her ud:

   
     
        for (int i = 0; i < drikkeList.size(); i++) {
         
            sum = sum + drikkeList.get(i).pris;
            res = res+"du har købt følgende"+ drikkeList.get(i).navn + "og nr er" + drikkeList.get(i).nr + "og den koster" + drikkeList.get(i).pris;
                     
        }



også til sidst skal du returne det rigtige.
så istedet at
return res + sum;
skal du nu barae
return res;

håber det hjalp lidt :D
der er nok at give sig i kast med.
Avatar billede changelevel Nybegynder
26. januar 2012 - 09:25 #9
Her forstår ikke hvad du mener med at drikkeList må vaere null da den ikke har faaet en vaerdi?
Avatar billede changelevel Nybegynder
26. januar 2012 - 09:26 #10
og hvordan giver jeg den værdi??
Avatar billede changelevel Nybegynder
26. januar 2012 - 10:30 #11
Nu er jeg forvirret... jeg er meget taknemlig hvis nogle her vil forklare mig lidt mere deltaljeret....

Jeg har jo opretteDrikkeVarer(); i konstukør jo? betyder det ikke jeg har oprettet drikkervare og listen?

Jeg skal da bruge main til at starte programmet op??
Eller er jeg helt væk :D
Avatar billede kiksen1987 Novice
26. januar 2012 - 11:42 #12
du har lavet 2 constructor
1 som tager imod: String nav, int nr, double pris
1 som tager imod: intet


    public DrikkeVarer(String navn, int nr, double pris){

        this.navn = navn;
        this.nr = nr;   
        this.drikkeList = new ArrayList();

    }

    public DrikkeVarer(){
     
        opretteDrikkeVarer();
    }

dvs du kan sige:
DrikkeVarer drik = new DrikkeVarer();
i denne bliver ingen værdier sat og du får ikke lavet en Arraylist. Derfor du får exception
eller
DrikkeVarer drik = new DrikkeVarer("navn", 5, 13)
Heri sætter du alle dine værdier og denne construktor burde virke med de kode ændringer jeg skrev tidligere.

hvis du kigger i din
  public static void main(String[] args) {

        DrikkeVarer d = new DrikkeVarer();
        d.toString();
             
    }
så kan du se at du bruger din tomme DrikkeVarer();
dvs når du kalder din d.toString(); kan den ikke finde nogen værdier fordi den ikke er sat til noget endnu.
Avatar billede kiksen1987 Novice
26. januar 2012 - 11:46 #13
hvis du har flere spørgsmål er du velkommen til at tilføje mig på MSN: LT_BLACK_MAGIC@HOTMAIL.COM eller skriv til JoshMXRyder@Gmail.com så svarer jeg nok lidt hurtigere :)
Avatar billede changelevel Nybegynder
26. januar 2012 - 14:28 #14
Jeg tilføjer på msn..... Rigtig mange tak..
Avatar billede changelevel Nybegynder
26. januar 2012 - 14:38 #15
NU har jeg split op, men får ingen værdi ud af det .....forstår ingen ting nu....

1. put drikkevarer i listen.
2. print drikkevarer ud, og lægge priserne sammen...

irriterende ikke kan få det til at virke......



public class DrikkeVarer {

    private String navn;
    private int nr;
    private double pris;
   


    public DrikkeVarer(String navn, int nr, double pris){

        this.navn = navn;
        this.nr = nr;    

    }

    public String tostring(){
       
        String res = "";
        res = "du har købt" + navn +"som har nr"  + "pris      er :" + pris;
       
        return res;
       
    }

    public String getNavn() {
        return navn;
    }

    public int getNr() {
        return nr;
    }

    public double getPris() {
        return pris;
    }

}

public class Faktor {

    private DrikkeVarer a;
    private  DrikkeVarer b;
    private ArrayList<DrikkeVarer>drikkeList;

    public Faktor(){

        a = new DrikkeVarer("cola", 2, 200);
        b = new DrikkeVarer("Sprite", 2, 300);
        drikkeList = new ArrayList();
        drikkeList.add(a);
        drikkeList.add(b);

    }

    public String toString(){

        double  sum= 0 ;
        String res ="";
   
        for (int i = 0; i < drikkeList.size(); i++) {
               
        sum = sum + drikkeList.get  (i).getPris();
        res = res + drikkeList.get(i).toString();
        }
       
        res = res + sum +"dk";
        return res;
    }

}

public class Main {

    public static void main(String[] args) {
    Faktor f = new Faktor();
    f.toString();
       
       
}
   
   
}
Avatar billede changelevel Nybegynder
26. januar 2012 - 14:39 #16
HVordan vil i ellers lave den?
Avatar billede changelevel Nybegynder
26. januar 2012 - 16:27 #17
okay... jeg får fejlen uanset hvad...nogle vil giver mig en løsning... takker mange gange.....
Avatar billede kiksen1987 Novice
26. januar 2012 - 18:41 #18
hvad er din msn ? har ikke fået nogen inv
ps. husker du at import java.util.ArrayList; i toppen af din kode i de klasser der bruger arraylist???
Avatar billede changelevel Nybegynder
26. januar 2012 - 18:56 #19
hej, ja, det har jeg...... msn : jian@ofir.dk
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