Avatar billede amoelle Nybegynder
28. april 2002 - 13:46 Der er 11 kommentarer og
1 løsning

hashmap spørgsmål

Kan man formå en hashmap til at indeholde (referencer) til objekter i values delen ?

Mine objekter er at typen:

class SumClass 
  {
    long kId = 0;
    String kKode ="";
    String iNavn ="";
    String kKonto ="";
    double sumK = 0;
  }
og jeg vil gerne have en hashmap fyldt med sådanne elementer.

key kan være stringværdien af en tæller, og
values skal gerne være en 'reference'.

Hvordan gør man det, og hvordan hhv put'er og get'er jeg f.eks værdien

mySumClass.sumK, når mySumClass er en instans af SumClass ??

på forhånd tak
/Anne
Avatar billede aslan Nybegynder
28. april 2002 - 14:22 #1
import java.util.*;

class Brugere
{

    Brugere()
    {
        Hashtable brugere = new Hashtable();

        Person person1 = new Person("Bo",25);
        Person person2 = new Person("Hans",18);
        Person person3 = new Person("Maria",29);
        Person person4 = new Person("Line",15);



        brugere.put("Bo",person1);
        brugere.put(person2.navn,person2);
        brugere.put("Maria",person3);
        brugere.put("Line",person4);


        person1 = (Person) brugere.get("Hans");



        System.out.println(person1);
    }
    public static void main(String[] aslan)
    {
        new Brugere();
    }
}
class Person
{
    String navn;
    int alder;

    Person(String n,int a)
    {
        navn = n;
        alder = a;
    }
    public String toString()
    {
        return navn+" "+alder;
    }
}
Avatar billede amoelle Nybegynder
28. april 2002 - 14:46 #2
Har jeg forstået dig rigtigt:
du laver een HashTable, hvori du kommer Person-objekter, og et Person-objekt er et array ?

Problemet er, at jeg ikke ved, hvormange Person-objekter jeg skal lave, og at instantieringen af Person-objekter skal ske dynamisk.
Dermed kan jeg ikke finde ud af at give den navne, der kan bruges som key i HashTable'en...

Så istedet for
        brugere.put(person2.navn,person2);

så det være med værdier i stil med 
        brugere.put(<kode der returnerer "person2.navn">,<kode der returnerer "person2">);

mvh Anne
Avatar billede aslan Nybegynder
28. april 2002 - 14:57 #3
Person-objekt er ikke et array bare en objekt jeg skaber via classen Person ja du kan sagtens proppe lige så mange objekter i hash tabellen som du har lyst til et eksempel:

            void opretBruger(String bruger,String pass)
            {

                Person nyBruger = new Person(bruger,pass);
                if(!brugere.contains(nyBruger))

                brugere.put(pass,bruger);
            }
Avatar billede amoelle Nybegynder
28. april 2002 - 15:00 #4
OK, jeg prøver at implementere ideen, og vender tilbage
Avatar billede amoelle Nybegynder
28. april 2002 - 19:11 #5
... ja, jeg bøvler stadigvæk...
nu ser det således ud, og det kan ikke kompilere ....
pga linien
        Person nyPerson = new Person(index, navn);
hvorimod
        Person nyPerson = new Person(navn, navn);
GODT kan kompilere...

Jeg vil gerne have, at enten key er et forløbende nummer, da jeg ikke kender navnet, når jeg skal slå op i HashTabellen...


public void opretBruger(String navn,int index)
    {
        Person nyPerson = new Person(navn, index);
        if(!brugere.contains(nyPerson))
          brugere.put(index, nyLinie);
    }
Avatar billede aslan Nybegynder
28. april 2002 - 19:16 #6
Hvad er fejlen og hvordan seer din person classe ud?
Avatar billede amoelle Nybegynder
28. april 2002 - 19:52 #7
Fejlen er:
proj/Brugere.java [63:1] cannot resolve symbol
symbol  : method put  (int,java.lang.String)
location: class java.util.HashMap
                    summeretKy.put(index ,nyLinie.toString() );
                              ^
1 error
Errors compiling Brugere [Local].


Og den barberede kode ser således ud
****************
/*
* Main.java
*
* Created on 28. april 2002, 19:39
*/

package proj;

import java.util.*;

public class Brugere {
    public HashMap summeretKy = new HashMap();
    int sumKyTaeller = 0;


    /** Creates new Brugere */
    public Brugere () {
    // her skal egentlig være en løkke, hvor man traver gennem en kollektion   
        DataSet ko =new DataSet();
    sumKyTaeller += 1;
    opretKyLinie(ko.konto,ko.rKonto,ko.kKode, ko.kPris,sumKyTaeller );
    }
 
    public static void main (String args[]) {
        new Brugere();
    }

    class DataSet
    {
            public String konto;
            public String rKonto;
            public String kKode;
            public String kEmne;
            public String kInst;
            public double kPris=0;
    }

    class KyLinie
    {
        String iNavn;
        String kNavn;
        String ktoNr;
        double beloeb;

        KyLinie(String n, String ky,String kto, double pris)
        {
            iNavn = n;
            kNavn = ky;
            ktoNr = kto;
            beloeb = pris;
        }

        public String toString()
        {
            return iNavn + "::" + kNavn + "::" + ktoNr + "::" + beloeb;
        }
    }

        public void opretKyLinie(String navn,String kyNavn,String ktoNr, double pris,int index)
    {
            KyLinie nyLinie = new KyLinie(navn, kyNavn, ktoNr, pris);
            if(!summeretKy.containsValue(navn + "::" + kyNavn + "::" + ktoNr + "::" + pris))
                    summeretKy.put(index ,nyLinie.toString() );
    }
           
}
*************************
Avatar billede aslan Nybegynder
28. april 2002 - 20:38 #8
summeretKy.put(navn ,nyLinie);
Avatar billede aslan Nybegynder
28. april 2002 - 20:39 #9
if(!summeretKy.containsValue(nyLinie))
Avatar billede radiohead Nybegynder
28. april 2002 - 20:40 #10
hash?
Avatar billede amoelle Nybegynder
29. april 2002 - 12:56 #11
Det lykkedes at lave en unik nøgle, som ikke stammer fra en tæller:
  summeretKy.put(navn+kyNavn+ktoNr) ,nyLinie);
så nu virker det.
Tak for hjælpen.
Avatar billede aslan Nybegynder
29. april 2002 - 14:48 #12
Glad for dine vegne:)
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