27. april 2001 - 10:00Der er
22 kommentarer og 1 løsning
Lave array ud fra værdier i et andet array?
Jeg har et array med Strings. Jeg ville gerne lave en funktion, der for hver String i dette array, danner et array af samme navn som String-værdien med en størrelse x.
Længden er ikke noget problem, den er fast for alle arrays, der skal laves.
public void spiller(){ System.out.println(\"Hvor mange spillere vil du lave?\"); antalSpillere = keyboard.nextInt(); String[] spillerNavn = new String[antalSpillere]; for(int i = 0;i < (antalKugler);i++){ kugleNavn[i] = \"kugle\"+(i+1); kugleNavn[i];
Åh, nu læser jeg dir spørgsmål rigtigt. Du kan ikke lave variabler med nye navne på runtime. Men du kan bruge en eller anden klasse, hvor du slår op med et navn, og får et array retur. Er det godt nok?
DET ovenover skal ikke tages i betragtning, dette gælder :
public void spiller(){ System.out.println(\"Hvor mange spillere vil du lave?\"); antalSpillere = keyboard.nextInt(); String[] spillerNavn = new String[antalSpillere]; for(int i = 0;i < (antalSpillere);i++){ spillerNavn[i] = \"spiller\"+(i+1); //spillerNavn[i];
System.out.println(spillerNavn[i]); } Det er så i denne for-løkke, jeg ville lave et array, der hedder spiller1 med int[x] pladser. Jeg kan bare ikke lure tricket :(
Det kan ikke lade sig gøre runtime at oprette nye variable.
Jeg vil foreslå dig at du bruger en Hashtable hvori du gemmer det array som der repræsenterer den pågældende spillers array:
Eks: Hvis du har erklæret en Hashtable andetsteds: Hashtable spillere = new Hashtable();
så i løkken gør du følgende: int[] arr = new int[50]; spillere.put(spillerNavn[i], arr);
Så har du gemt dit array i hashtabellen, hvor du så senere kan hente den ud med spillere.get(spillerNavn[i]);
Du skal bare være opmærksom på to ting Hashtabeller rummer objekter og skal derfor typecastes når du henter arrayet ud: int [] arr = (int []) spillere.get(\"spiller1\");
For det andet når du arbejder på arrayet, hvis du hiver det ud som ovenstående så arbejder du på en kopi af arrayet og ikke det faktiske array.
Men dette klarer du fint ved at lægge arrayet tilbage med put når du er færdig med det eller ved at arbejde direkte på det som følger:
((int[]) spillere.get(\"spiller1\"))[1] = 2; f.eks.
Man arbejder ikke på en kopi af arrayet - man får faktisk en reference, så man skal ikke \"putte\" den tilbage. Havde det været en int, så ja. Følgende udskriver, som ventet, 77 77 78 78.
import java.util.*;
class newint { public static void main(String[] args) {
Hashtable spillere = new Hashtable();
int[] arr = new int[50]; arr[7]=77; spillere.put(\"sjovtnavn\", arr); System.out.println(arr[7]);
int [] arr2 = (int []) spillere.get(\"sjovtnavn\"); System.out.println(arr2[7]); arr2[7]++; System.out.println(arr2[7]);
int [] arr3 = (int []) spillere.get(\"sjovtnavn\"); System.out.println(arr3[7]);
Ok, det lyder hemmeligt :) Kan du give mig et \"billede\" af hvordan det hashTable vil se ud, hvis man har 4 spillere. Jeg vil gerne forstå det bedre, hvis jeg skal laver det og så skal arbejde på det gennem programmet ?
Det ér den rigtige vej, nutten :) Kan du skitsere i ord eller pseudo-kode, hvad der skal ske, så kan vi nok lave mere af koden. Min lille stump ovenfor var bare for at give dig en kørende version af noget - din oprindelige problemstilling kan jeg ikke lige finde ud af.
Skal de altid hedde \"spiller1\" (altså \"spiller\" og et fortløbende tal?) og aldrig \"anja\", f.eks.? Så skal du da bare lave et array af arrays så du kan skrive spiller[3][6] f.eks.
spiller[0][0], spiller[0][1] op til spiller[0][6] spiller[1][0], spiller[1][1] op til spiller[1][6] spiller[2][0], spiller[2][1] op til spiller[2][6] spiller[3][0], spiller[3][1] op til spiller[3][6]
kan du ikke lide 0..3 og 0..6 opretter du bare med én mere og glemmer 0 indgangene:
nutten > hvis du bestemmer dig for at nummerere spillerene fortløbne så vil du hvis du skal hvae fat i spiller1 skrive spiller[1] - længere er den ikke
Jeg har bikset med det en times tid, med den løsning du giver med spiller[][]. Den fungerer perfekt.
Det jeg mente med at styre er egentlig ligegyldigt nu hvor jeg har set hvordan det funger. Det er lettere umiddelbart at styre et 2-dim array end 4 arrays - synes jeg.
Jeg kan kun være meget tilfreds med din løsning. Tak for hjælpen.
Så var det jo godt vi fik \"snakket det igennem\" !
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.