Avatar billede nutten Nybegynder
27. april 2001 - 10:00 Der 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.
Avatar billede nutten Nybegynder
27. april 2001 - 10:01 #1
Det skal måske tilføjes, at det nye array har typen int[].
Avatar billede erikjacobsen Ekspert
27. april 2001 - 10:05 #2
Hvordan er det nu? Hvis du skal lave et nyt array med en
længde, der kommer andetsteds fra, skal du vel:

  int[] a;

  a = new int[n];

hvor n er længden.
Avatar billede nutten Nybegynder
27. april 2001 - 10:12 #3
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];

            System.out.println(kugleNavn[i]);




        }
Avatar billede erikjacobsen Ekspert
27. april 2001 - 10:13 #4
hvor kommer antalKugler fra ?
Avatar billede erikjacobsen Ekspert
27. april 2001 - 10:15 #5
Å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?
Avatar billede nutten Nybegynder
27. april 2001 - 10:15 #6
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 :(
Avatar billede shartvig Nybegynder
27. april 2001 - 10:38 #7
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.

Håber dette kunne hjælpe dig
Avatar billede erikjacobsen Ekspert
27. april 2001 - 10:52 #8
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]);

}
}
Avatar billede nutten Nybegynder
27. april 2001 - 10:53 #9
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 ?
Avatar billede nutten Nybegynder
27. april 2001 - 11:21 #10
Det virker som om man ikke kan tælle op på arr ?
Problemet er vel at jeg ikke ved, hvormange spillere, der indtastes.????
Avatar billede erikjacobsen Ekspert
27. april 2001 - 11:25 #11
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.
Avatar billede shartvig Nybegynder
27. april 2001 - 11:30 #12
Du har selvfælgelig ret erikjacobsen, kort hjerneblødning, det er jo netop reference idet det er et objekt.

Avatar billede nutten Nybegynder
27. april 2001 - 11:31 #13
Jeg spørger brugeren, hvor mange spillere han vil have. Hvis en bruger vil have 4 spillere, vil jeg gerne have lavet 4 arrays, der hhv hedder:

int[] spiller1 = new int[7];
int[] spiller2 = new int[7];
int[] spiller3 = new int[7];
int[] spiller4 = new int[7];

Avatar billede erikjacobsen Ekspert
27. april 2001 - 11:33 #14
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.
Avatar billede nutten Nybegynder
27. april 2001 - 11:46 #15
Jeg har bestemt, de altid skal hedde spiller og et fortløbende tal.

DVS. ovenfor at i det 2-dimensionelle array spiller, ligger spiller3 på [3] og alle hans informationer ligger på [6]  ????
Avatar billede erikjacobsen Ekspert
27. april 2001 - 11:53 #16
Nej spiller 3 (ok arrays starter i 0 i Java - men det glemmer vi lige) har
7 oplysninger om sig. Du skal sige noget i denne retning (utestet):

antalSpillere = keyboard.nextInt();
int spiller[][] = new int[antalSpillere][7];
Avatar billede erikjacobsen Ekspert
27. april 2001 - 11:55 #17
Taster man 4 ind har du adgang til

  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:

int spiller[][] = new int[antalSpillere+1][7+1];
Avatar billede nutten Nybegynder
27. april 2001 - 11:57 #18
Så jeg skal altså selv holde styr på, at første række er spiller1 og anden række er spiller2 osv.
Avatar billede tmouritsen Nybegynder
27. april 2001 - 12:34 #19
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
Avatar billede nutten Nybegynder
27. april 2001 - 12:43 #20
tmouritsen >> Det kan også være langt nok, hvis man ikke er superhval til Java ?
Avatar billede erikjacobsen Ekspert
27. april 2001 - 13:22 #21
Jah, nutten, du skal selv hold styr på det.... men det er hvad programmering
handler om. Ok, du fik ikke en løsning så du kunne:

  spiller1[0]=88;

men så skal du jo bare:

  spiller[1][0]=88;

Og du får muligheden for at løbe alle spillere igennem med en for-løkke.

Spørg endelig videre, hvis du er i tvivl om noget.
Avatar billede nutten Nybegynder
27. april 2001 - 13:29 #22
erikjacobsen >>

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.
Avatar billede erikjacobsen Ekspert
27. april 2001 - 13:34 #23
Så var det jo godt vi fik \"snakket det igennem\" !
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