Avatar billede dsp82 Nybegynder
09. november 2003 - 02:42 Der er 20 kommentarer og
1 løsning

oprettelse af dynamisk ArrayList.

Jeg har brug for at lave en metode, hvor java selv opretter et ArrayList for hver gang jeg ønsker det.
Dvs. første gang jeg ønskede den skulle oprette et ArrayList, ville den lave en ArrayList, som hed

ArrayList 1 = new ArrayList

Hvis jeg så valgte at køre metoden igen, skulle den oprette et nyt ArrayList ved navn 2 osv.

Disse ArrayList skulle gerne være dynamiske, idet man skal kunne simpelt oprette et nyt, slet en eksisterende og udskrive den. Udover det skal man så kunne tilføje værdier i de forskellige index, ligeledes slette og udskrive.

Lyder lidt meget, har nogenlunde en ide om hvordan det skal laves, har dog lidt problemer med at skrive metoden, hvori java opretter et ArrayList og giver den et navn hhv. 1,2,3 osv.
Avatar billede s.nielsen Nybegynder
09. november 2003 - 04:52 #1
hmm jeg kan ikke rigtigt forstå hvad fidusen skulle være ved at lave det på den måde? Hvis du opretter ArrayList objekterne inde i selve metoden, sådan som du beskriver, eksisterer de jo kun så længe den metode bliver udført og bliver automatisk slettet når metoden returnerer.
I øvrigt skal variabelnavne, metoder og klasser starte med et bogstav, og derfor kan man ikke kalde en variabel for 1.
Ellers må du lige uddybe problemstillingen :)

- Søren
Avatar billede arne_v Ekspert
09. november 2003 - 10:27 #2
Umiddelbart lyder det for mig som at du skal have en HashMap med 1, 2 etc.
som key (enten Integer eller String) og ArrayList som value.

Su kan du oprette ArrayList's gemme dem, hente dem frem og slette dem
efter behov.
Avatar billede dsp82 Nybegynder
09. november 2003 - 17:56 #3
har udtrykt mig forkert, er ik helt skarp til alle java udtrykkene. Det jeg skal lave er et faktuering program. Jeg har nogle varer, som ligger i et ArrayList for sig selv, og nogle kunder, som også ligger i et ArrayList. Hvis jeg så en kunde skal købe nogle varer, skal der oprettes en fakture over de varer, han eller hun køber.

Denne fakture regnede med at lave som et ArrayList,hvor der står hvad hvad kunden har købt af varer i hvert index. Problemet ligger i, at så snart jeg gik i gang med fakture nr. 2, ville den overskrive fakture 1, i det ligger i ArrayList. Derfor er nødt til at lave det om, således at hvert fakture står for sig selv dvs. et ArrayList for hver fakture. Det er mit problem.

Er lige startet i skole, og har ikke lært om noget med HashMap endnu, så vil helst ikke bevæge mig derud.
Avatar billede arne_v Ekspert
09. november 2003 - 18:15 #4
Du kan sagtens have flere forekomster af en faktura ArrayList så du ikke behøver
at overskrive.
Avatar billede dsp82 Nybegynder
09. november 2003 - 18:22 #5
hvordan det, kan du give et hurtigt eksempel?
Sådan som jeg ser det, så overskriver index'ene idet det kører i samme ArrayList hele tiden.
Avatar billede arne_v Ekspert
09. november 2003 - 18:25 #6
Jeg kan godt prøve at lave et eksempel.
Avatar billede dsp82 Nybegynder
09. november 2003 - 19:03 #7
venter spændt
Avatar billede arne_v Ekspert
09. november 2003 - 19:17 #8
Her er en mulighed:

import java.util.*;

public class FakturaTest {
    public static void main(String[] args) {
        List kunder = new ArrayList();
        List varer = new ArrayList();
        List fakturaer = new ArrayList();
        Kunde hansen = new Kunde("Hansen");
        Kunde jensen = new Kunde("Jensen");
        kunder.add(hansen);
        kunder.add(jensen);
        Vare sodavand = new Vare("Sodavand");
        Vare chokolade = new Vare("Chokolade");
        varer.add(sodavand);
        varer.add(chokolade);
        fakturaer.add(new Faktura(hansen, sodavand));
        fakturaer.add(new Faktura(hansen, chokolade));
        fakturaer.add(new Faktura(jensen, sodavand));
        System.out.println(kunder);
        System.out.println(varer);
        System.out.println(fakturaer);
    }
}

class Kunde {
    private String navn;
    public Kunde(String navn) {
        this.navn = navn;
    }
    public String getNavn() {
        return navn;
    }
    public void setNavn(String navn) {
        this.navn = navn;
    }
    public String toString() {
        return navn;
    }
}

class Vare {
    private String navn;
    public Vare(String navn) {
        this.navn = navn;
    }
    public String getNavn() {
        return navn;
    }
    public void setNavn(String navn) {
        this.navn = navn;
    }
    public String toString() {
        return navn;
    }
}

class Faktura {
    private Kunde kunde;
    private Vare vare;
    public Faktura(Kunde kunde, Vare vare) {
        this.kunde = kunde;
        this.vare = vare;
    }
    public Kunde getKunde() {
        return kunde;
    }
    public Vare getVare() {
        return vare;
    }
    public void setKune(Kunde kunde) {
        this.kunde = kunde;
    }
    public void setV(Vare vare) {
        this.vare = vare;
    }
    public String toString() {
        return kunde + ":" + vare;
    }
}
Avatar billede arne_v Ekspert
09. november 2003 - 19:20 #9
Det blev iøvrigt ikke til flere faktura array lister. Jeg synes ikke
at det ville passe gost alligevel.
Avatar billede arne_v Ekspert
09. november 2003 - 19:23 #10
Trinet opad i avancerethed vil være et erstatte de rå ArrayList'er med
special klasser for de forskellige ting.
Avatar billede arne_v Ekspert
09. november 2003 - 19:40 #11
Her er et lidt større eksempel:

package test;

import java.util.*;

public class FakturaTest {
    public static void main(String[] args) {
        KundeList kunder = new KundeList();
        VareList varer = new VareList();
        List fakturaer = new ArrayList();
        kunder.add(new Kunde("Hansen", "Pærevej 1"));
        kunder.add(new Kunde("Jensen", "Æblevej 2"));
        varer.add(new Vare("Sodavand", 5));
        varer.add(new Vare("Chokolade", 25));
        fakturaer.add(new Faktura(kunder.find("Hansen"), varer.find("Sodavand"), 30));
        fakturaer.add(new Faktura(kunder.find("Hansen"), varer.find("Chokolade"), 10));
        fakturaer.add(new Faktura(kunder.find("Jensen"), varer.find("Sodavand"), 60));
        System.out.println(kunder);
        System.out.println(varer);
        System.out.println(fakturaer);
    }
}

class KundeList {
    private List list = new ArrayList();
    public void add(Kunde kunde) {
        list.add(kunde);
    }
    public Kunde get(int ix) {
        return (Kunde)list.get(ix);
    }
    public Kunde find(String navn) {
        for(int i = 0; i < list.size(); i++) {
            Kunde kunde = (Kunde)list.get(i);
            if(kunde.getNavn().equals(navn)) {
                return kunde;
            }
        }
        return null;
    }
    public String toString() {
        return list.toString();
    }
}

class VareList {
    private List list = new ArrayList();
    public void add(Vare vare) {
        list.add(vare);
    }
    public Vare get(int ix) {
        return (Vare)list.get(ix);
    }
    public Vare find(String navn) {
        for(int i = 0; i < list.size(); i++) {
            Vare vare = (Vare)list.get(i);
            if(vare.getNavn().equals(navn)) {
                return vare;
            }
        }
        return null;
    }
    public String toString() {
        return list.toString();
    }
}

class Kunde {
    private String navn;
    private String adresse;
    public Kunde(String navn, String adresse) {
        this.navn = navn;
        this.adresse = adresse;
    }
    public String getNavn() {
        return navn;
    }
    public String getAdresse() {
        return adresse;
    }
    public void setNavn(String navn) {
        this.navn = navn;
    }
    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }
    public String toString() {
        return navn + ":" + adresse;
    }
}

class Vare {
    private String navn;
    private int pris;
    public Vare(String navn, int pris) {
        this.navn = navn;
        this.pris = pris;
    }
    public String getNavn() {
        return navn;
    }
    public int getPris() {
        return pris;
    }
    public void setNavn(String navn) {
        this.navn = navn;
    }
    public void setPris(int pris) {
        this.pris = pris;
    }
    public String toString() {
        return navn + ":" + pris;
    }
}

class Faktura {
    private Kunde kunde;
    private Vare vare;
    private int antal;
    public Faktura(Kunde kunde, Vare vare, int antal) {
        this.kunde = kunde;
        this.vare = vare;
        this.antal = antal;
    }
    public Kunde getKunde() {
        return kunde;
    }
    public Vare getVare() {
        return vare;
    }
    public int getAntal() {
        return antal;
    }
    public void setKunde(Kunde kunde) {
        this.kunde = kunde;
    }
    public void setVare(Vare vare) {
        this.vare = vare;
    }
    public void setAntal(int antal) {
        this.antal = antal;
    }
    public String toString() {
        return kunde + ":" + vare + ":" + antal;
    }
}
Avatar billede arne_v Ekspert
09. november 2003 - 19:40 #12
Håber at det giver lidt inspiration.
Avatar billede dsp82 Nybegynder
09. november 2003 - 21:57 #13
det jeg umiddelbart kan se er, at du har lavet ArrayListen således, at der i index 0, står kundeinformation, og i index 1,2,3 osv. de købte varer, er det sandt?
Avatar billede arne_v Ekspert
09. november 2003 - 21:59 #14
Nej - slet ikke.

Jeg har lavet et faktura objekt som peger på både en kunde og en vare.
Avatar billede dsp82 Nybegynder
09. november 2003 - 22:04 #15
et lille spørgsmål mere, jeg har gjort nogenlunde som du har beskrevet og det virker fint, men i index 0, hvor kundeinformationen skal stå, har jeg gjort således at man søger efter personen udfra tlfnr. dvs. en søgefunktion, hvordan får jeg søgefunktionen svar sat ind i index 0.

            System.out.print("Indtast TLFnr: ");

            num=Keyboard.readString();

            System.out.println();

            for (int i=0; i < Kunde.privat.size(); i++)
            {
                Privatkunde fund = (Privatkunde)privat.get(i);

                svar = fund.getPtlf().indexOf(num);

                if (svar>=0)
                {
                    System.out.println("Privatkunde: "+i+"\n"+Kunde.privat.get(i)+"\n"); //hvordan får jeg sat dette ind i index 0?
                }
Avatar billede arne_v Ekspert
09. november 2003 - 22:13 #16
Man kan opdatere et eksisterend element i en ArrayList med:
  listvariabel.set(index, objekt);
Avatar billede dsp82 Nybegynder
09. november 2003 - 22:20 #17
ja, det ved jeg godt, men i en del af min kode, udprinter den kundens information for de passende "løsninger". Dette slettes jo så snart for løkken afsluttes. hvordan bibeholder jeg svaret? jeg kan jo ikke ligefrem skrive

(fakture.get(i).setInfo(Kunde.privat.get(i))

eller kan jeg?
Avatar billede dsp82 Nybegynder
09. november 2003 - 23:00 #18
ok, glem alt sammen, et meget simpelt spørgsmål, hvordan laver jeg objektet i ifløkken om til en String dvs. Kunde.privat.get(i) om til en string? Så skal jeg nok acceptere dit svar.

                if (svar>=0)
                {
                    Kunde.privat.get(i)
                }
Avatar billede arne_v Ekspert
09. november 2003 - 23:04 #19
Det nemmeste er vel at lave en toString metode på objektet.

(ligesom alle mine klasse fra tidligere har)
Avatar billede dsp82 Nybegynder
09. november 2003 - 23:22 #20
det kan jeg da ikke gøre i mit eksempel overfor?
Avatar billede arne_v Ekspert
09. november 2003 - 23:31 #21
Jeg formoder at det er:

System.out.println(Kunde.privat.get(i).toString());

du vil - det kan du godt.
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