Avatar billede bagnavnet Nybegynder
06. december 2004 - 20:37 Der er 19 kommentarer og
1 løsning

Simpel Arraylist-program

Hej

Jeg har en bruger klasse og en vare klasse.
En bruger skal holde en arraylist med varer som skal oprettes med navn og pris.
Hvordan gør jeg det?
Avatar billede arne_v Ekspert
06. december 2004 - 20:39 #1
Lige ud af landevejen.

Bruger klassen har et private field med navn varer af typen ArrayList.

Vare klassen har en constructor med 2 argumenter navn og pris.

Så kan du i Bruger klassen tilføje varer med:

varer.add(new Vare("xyz", 100));
Avatar billede arne_v Ekspert
06. december 2004 - 20:41 #2
Nu lyder det som en opgave, så jeg vil ikke løse den helt.

Men jeg poster et eksempel, som du måske kan lære lidt af.
Avatar billede arne_v Ekspert
06. december 2004 - 20:42 #3
public class Bog {
  private String titel;
  private String forlag;
  private int udgivelse;
  public Bog() {
      this("", "", 0);
  }
  public Bog(String titel, String forlag, int udgivelse) {
      this.titel = titel;
      this.forlag = forlag;
      this.udgivelse = udgivelse;
  }
  public String getTitel() {
      return titel;
  }
  public void setTitel(String titel) {
      this.titel = titel;
  }
  public String getForlag() {
      return forlag;
  }
  public void setForlag(String forlag) {
      this.forlag = forlag;
  }
  public int getUdgivelse() {
      return udgivelse;
  }
  public void setUdgivelse(int udgivelse) {
      this.udgivelse = udgivelse;
  }
  public String toString() {
      return (titel + " " + forlag + " " + udgivelse);
  }
}
Avatar billede arne_v Ekspert
06. december 2004 - 20:42 #4
import java.util.*;

public class Forfatter {
  private String navn;
  private List boger;
  public Forfatter() {
      this("");
  }
  public Forfatter(String navn) {
      this.navn = navn;
      boger = new ArrayList();
  }
  public String getNavn() {
      return navn;
  }
  public void setNavn(String navn) {
      this.navn = navn;
  }
  public void addBog(Bog b) {
      boger.add(b);
  }
  public String toString() {
      StringBuffer sb = new StringBuffer(navn + ": ");
      for(int i = 0; i < boger.size(); i++) {
        if(i > 0) {
            sb.append(",");
        }
        sb.append(boger.get(i).toString());
      }
      return sb.toString();
  }
}
Avatar billede arne_v Ekspert
06. december 2004 - 20:42 #5
public class TestForfatterBog {
  public static void main(String[] args) {
      Forfatter f = new Forfatter("Anders Andersen");
      f.addBog(new Bog("En A historie", "Superforlaget", 1990));
      f.addBog(new Bog("Essay", "Superforlaget", 1992));
      System.out.println(f);
  }
}
Avatar billede bagnavnet Nybegynder
06. december 2004 - 22:26 #6
hvorfor bruger man this. i constuctoren? Eller tror godt jeg ved hvorfor, men hvorfor bruger man det ikke altid?
Jeg har lavet følgende:
--------------------------
import java.util.Vector;
import java.sql.*;

public class Test
{
  public static void main(String[] args)
  {
  Bruger b = new Bruger("Jacob");
  b.addVare(new Vare("Mel", 100));
  b.addVare(new Vare("cola", 15));
  System.out.println(b);
  }
  }
------------------------
import java.util.ArrayList;

public class Bruger
{
    private String navn;
    private ArrayList vare;


  public Bruger(String navn)
  {
    this.navn = navn;
    vare = new ArrayList();
   
  }
 
  public void addVare(Vare v)
  {
        vare.add(v);
  }
  }
------------------------

public class Vare
{
  private String navn;
  private int pris;

  public Vare(String navn, int pris)
  {
    this.navn = navn;
    this.pris = pris;
  }

  public String toString()
  {
    return navn+": "+pris+" kr.";
  }
}
--------------
I testklassen får jeg fejl på næsten det hele, den siger ved run at der ikke er nogen main-method og at jeg skal oprette contructor i Bruger...m.m.
Avatar billede arne_v Ekspert
06. december 2004 - 22:28 #7
Jeg bruger this i constructoren når jeg skal kalde en anden constructor.
Avatar billede arne_v Ekspert
06. december 2004 - 22:29 #8
Ligger de som 3 forskellige filer i samme projekt ?
Avatar billede bagnavnet Nybegynder
06. december 2004 - 22:34 #9
ja, de ligger som 3 klasser i samme projekt.
Hvor kalder du den anden constructor?
Avatar billede arne_v Ekspert
06. december 2004 - 22:34 #10
public Bog() {
      this("", "", 0);
  }
  public Bog(String titel, String forlag, int udgivelse) {
      this.titel = titel;
      this.forlag = forlag;
      this.udgivelse = udgivelse;
  }

2 constructorer - den første kalde den sidste
Avatar billede arne_v Ekspert
06. december 2004 - 22:37 #11
Øh - ovenstående kode kører fint hos mig !

(der mangler nok en toString for Bruger)
Avatar billede bagnavnet Nybegynder
06. december 2004 - 22:41 #12
hvad bruger du den første constuctor til? Hvorfor skal den kalde den anden, og hvorfor skal den i det heletaget være der, jeg har ikke taget den med i min for var i tvivl om hvad den skulle bruges til.

jeg prøver lige en toString...
Avatar billede arne_v Ekspert
06. december 2004 - 22:46 #13
Jeg bruger ikke den første constructor men det anss som værende "god skik og brug"
at have en constructor uden argumenter
Avatar billede arne_v Ekspert
06. december 2004 - 22:46 #14
... det anses som ...
Avatar billede bagnavnet Nybegynder
06. december 2004 - 22:57 #15
Jeg fatter det simpelthen ikke, tror jeg har fået den forkerte indgangsvinkel til det her programmering. Hvordan hulan får man overblik over det???

Hvis du tager følgende kode og smider ind i 3 klasser i samme projekt virker det så?
-------------------

public class Test {

    public static void main(String[] args) {
       
    Bruger b = new Bruger("Jacob");
                b.addVare(new Vare("Mel", 100));
                b.addVare(new Vare("cola", 15));
                System.out.println(b);
            }
        }
    ---------------------
import java.util.ArrayList;

public class Bruger
{
    private String navn;
    private ArrayList vare;
   
    public Bruger(String navn)
  {
    this.navn = navn;
    vare = new ArrayList();
   
  }
 
  public void addVare(Vare v)
  {
        vare.add(v);
  }

  public String toString() {
      return (navn);
  }

 
  }
--------------------------

public class Vare
{
  private String navn;
  private int pris;

  public Vare(String navn, int pris)
  {
    this.navn = navn;
    this.pris = pris;
  }

  public String toString()
  {
    return navn+": "+pris+" kr.";
  }
}
------------------------
Avatar billede arne_v Ekspert
06. december 2004 - 23:00 #16
Jep

C:\e>dir
Volume in drive C is ARNEPC2_C
Volume Serial Number is E09B-1D63

Directory of C:\e

06/12/2004  22:59      <DIR>          .
06/12/2004  22:59      <DIR>          ..
06/12/2004  22:59                  347 Bruger.java
06/12/2004  22:35                  260 Test.java
06/12/2004  22:36                  239 Vare.java
              3 File(s)            846 bytes
              2 Dir(s)  6.327.488.512 bytes free

C:\e>javac *.java

C:\e>java Test
Jacob
Avatar billede bagnavnet Nybegynder
06. december 2004 - 23:17 #17
hmm, nu har jeg fået det til at virke, har ikke ændret ved noget, men nu kører det!??

Hvordan får jeg vist de varer der ligger under brugeren?
System.out.println(b); Her viser den brugeren, kan man fyre vare på den linie på en smart måde?
Avatar billede arne_v Ekspert
06. december 2004 - 23:19 #18
Kig på toString i min Forfatter klasse for inspiration !
Avatar billede bagnavnet Nybegynder
06. december 2004 - 23:23 #19
forstår det ikk, har vist siddet her for længe i dag, men tak for hjælpen... jeg har på fornemmelsen at det ikke bliver sidste gang at vi tales ved.
Avatar billede arne_v Ekspert
01. januar 2005 - 13:44 #20
OK ?
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