Avatar billede dk_zerocool Nybegynder
28. oktober 2003 - 15:00 Der er 16 kommentarer og
1 løsning

2 dimisionelt String array

Jeg manger en som kan forklare mig hvordan et 2 dimisionelt String array skal bygges op, jeg har prøvet en masse men får nullpointer-exceptions hele tiden.

Jeg har 2 værdier som skal stå i arrayet: et ID og en Streng, ID´et skal så have strengen under sig, så man feks. kan hente den først streng ud som hører sammen med et medsendt ID.
Avatar billede europe Nybegynder
28. oktober 2003 - 15:11 #1
Prøv med...

String array[][] =  new String[2][2];

array[0][0] = id;
array[0][1] = streng;

array[1][0] = id2;
array[1][1] = streng2;


System.out.println("id :"+array[0][0]+" Streng :"+array[0][1]);
Avatar billede Slettet bruger
28. oktober 2003 - 15:12 #2
Object[][] array2d = new Object[][]{{ID1,str1},{ID2,str2}};

eller hvad med en Hashtable:

Hashtable ht = new Hashtable();
ht.put(ID1,str1);
ht.put(ID2,str2);

Object obj = ht.get(ID1); // returnerer str1
Avatar billede mikkelbm Nybegynder
28. oktober 2003 - 15:12 #3
Jeg tror ikke det er et 2-dimensionelt array du skal have fat i, men derimod en HashMap:

http://java.sun.com/j2se/1.3/docs/api/java/util/HashMap.html

Den arbejder nemlig med en 'key' og et 'Object'
Avatar billede europe Nybegynder
28. oktober 2003 - 15:13 #4
Jeg ville også undersøge HashMap eller hashTables da det giver mulighed for at lave en nøgle/key/id til en object der indsættes...
Avatar billede dk_zerocool Nybegynder
28. oktober 2003 - 15:15 #5
Er det muligt at der kan være flere strenge for hvert ID ??
Avatar billede mikkelbm Nybegynder
28. oktober 2003 - 15:16 #6
Hvis du laver det i en HashMap, kan du indsætte objekter. Det vil sige du kan lave en klasse med en masse forskellige strenge knyttet til og så lægge det ind i HashMap'en med et bestemt ID.
Avatar billede dk_zerocool Nybegynder
28. oktober 2003 - 15:18 #7
Men det skal være så jeg kan hive den første værdi ud som er blevet "addet" til tabellen, som hænger sammen med et givet ID.
Avatar billede Slettet bruger
28. oktober 2003 - 15:18 #8
Du kan evt. benytte java.util.Vector til at gemme strenge i, i stedet for at lave en ny klasse til det.
Avatar billede europe Nybegynder
28. oktober 2003 - 15:21 #9
Det er sådan med HashTable og HashMap at den key man bruger er unik for det object man sætter ind - Der for kan man med ro i sindet jjust's metode med at lave en vector indeholdende de elementer som skal gemmes under det pågælden id.
Avatar billede dk_zerocool Nybegynder
28. oktober 2003 - 15:24 #10
Kan du ikke give et lille eksempel på det, hvor der bruges, jeg kan godt se pointen i det, men ikke lige hvordan det skal opbygges.
Avatar billede europe Nybegynder
28. oktober 2003 - 15:35 #11
import java.util.*;

    Map holder = new HashMap();
    Vector stringHolder = new Vector();

    stringHolder.add(streng1);
    stringHolder.add(streng2);

    holder.put(id,stringHolder);
    // samme metode for den næste id og strenge...

    // få værdierne ud igen..

    Vector back = (Vector)holder.get(id);
    for(int i =i;i<back.size();i++)
    {
      String backString = (String)back.get(i);
      System.out.println(backString);
    }
Avatar billede europe Nybegynder
28. oktober 2003 - 15:36 #12
for løkken er selvfølgelig
for(int i =0;i<back.size();i++)
istedet...
Avatar billede europe Nybegynder
28. oktober 2003 - 15:38 #13
Både id og streng1 og streng2 SKAL være objecter det kan ikke være primitiver som int eller long...

Hvis det er det skal de wrappes i deres der tilhørende Objecter
eks.
Interger id = new Integer(1);
Avatar billede Slettet bruger
28. oktober 2003 - 16:33 #14
Det er sikkert ikke vigtigt her, men jeg ville nok normalt benytte Hashtable frem for Hashmap, eftersom metoderne er synkroniserede! Endvidere tillader Hashtable ikke null keys, så du er sikker på at få en advarsel hvis du indsætter et element med en null key!
Avatar billede dk_zerocool Nybegynder
28. oktober 2003 - 16:35 #15
Okay, det går stadig galt:

Her er koden:

public void addMessage(int userID, String message) {
    Integer id = new Integer(userID);
    messages.add(message); 
    userList.put(id, messages); 
  }
 
  public String getMessage(int userID)  { 
    try {
      Integer id = new Integer(userID);
      Vector temp = (Vector)userList.get(id);   
     
      return temp.firstElement().toString();
       
    } catch ( NullPointerException e ) {
        return "no messages";
    }   
  }
Avatar billede dk_zerocool Nybegynder
28. oktober 2003 - 16:52 #16
har fundet problemet jeg glemmer at lave den nye instans af Vector (messages = new Vector()) hver gang jeg kalder addMessage... :(

Europe du får pointene, da du kom med det eksempel jeg skulle bruge, og til i andre..tak for hjælpen.

Europe smider du ikke lige et svar
Avatar billede europe Nybegynder
29. oktober 2003 - 08:27 #17
svar ...
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