HashMap hm; int n = (int)(Math.random() * hm.size(); Iterator it = hm.keySet().iterator(); for(int i = 0; i <= n ; n++) { String key = it.next(); X value = hm.get(key); }System.out.println(key + " " + value);
Det er fordi har en opgave hvor jeg er i gang med et spil (meget primitivt).
Spillet består af en masse rum og et af kravene er at et tilfældig rum skal være et "transporter room" altså et rum hvir man bliver virdersendt til et nyt tilfældig rum....
Alle mine rum indlæses fra en fil i et hashMap og derfra skal jeg så vælge rummet
Hvis rummene er konstante gennem spillene, så kan du overveje at lave et String array med rum navnene (eller hvad der nu er key i HashMap'en) og slå op i det array.
HashMap hm; String[] keylist; int n = (int)(Math.random() * keylist.length); String key = keylist[n]; X = hm.get(key);
Det vil være lidt hurtigere. Om det er umagen værd afhænger af hvor tit det skal køres.
Jeg er ikke helt med på hvordan eks virker Arne V....
Erik: når jeg kører dit får jeg en kompileringsfejl med inkompatible typer på denne linie....
String a[] = roomMap.keySet().toArray();
nøglen i mit roomMap er 3 tal der er sat sammen til et tal (et koordinatsæt for det enkelte rum).... det virker dog stadig ikke selvom jeg ændrer det til
HashMap hm; int n = (int)(Math.random() * hm.size(); Iterator it = hm.keySet().iterator(); for(int i = 0; i <= n ; n++) { String key = it.next(); X value = hm.get(key); }System.out.println(key + " " + value);
// en gang String[] keylist = new String[hm.size()]; Iterator it = hm.keySet().iterator(); int n = 0; while(it.hasNext()) { keylist[n] = (String)it.next(); n++; }
// hver gang du skal have tilfældig int n = (int)(Math.random() * keylist.length); String key = keylist[n]; X = (X)hm.get(key);
Det kan nu ikke betale sig at trække elementerne ud selv, når Set har en toArray()
Synes godt om
Ny brugerNybegynder
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.