2011-11-07, 10:46
  #1
Medlem
Jag vill användaren ska kunna bestämma hur lång arrayen ska vara, Jag trodde att det skulle vara så enkelt att göra så här:
Kod:
Scanner keyboard = new scanner (system.in);

int langd =0;
bowling[] players = new bowling[langd]

System.out.println("Ange hur många tävlanden du vill registrera");
langd = keyboard.nextInt();

Men icke sa nicke, programmet ser bra ut i början men när jag registrerar första spelaren får jag fel meddelandet
Citat:
Exeption in thread "main" java.lang.ArrayIndexOutOfBoundsExeption: 0
Citera
2011-11-07, 10:53
  #2
Medlem
Jag är ingen javagud men om java är som andra språk så skapar du ju arrayen innan du ber om hur stor den ska vara.

Scanner keyboard = new scanner (system.in);

Kod:
int langd =0;

System.out.println("Ange hur många tävlanden du vill registrera");
langd keyboard.nextInt();

bowling[] players = new bowling[langd

Borde funka.
Citera
2011-11-07, 10:56
  #3
Medlem
ewallgs avatar
Använd en vektor eller en lista istället, då kan du låta den växa och den är mycket lättare att arbeta med då det är en hel klass med tillhörande funktioner.
Citera
2011-11-07, 12:27
  #4
Medlem
Hasslarns avatar
Precis som kalmar sa skapar du arrayen och sätter längden innan du frågar efter storlek. Tanken är ju att du ska fråga efter längden och sen använda den integern som längd
Citera
2011-11-07, 12:33
  #5
Medlem
Jooncs avatar
Citat:
Ursprungligen postat av themoniker
Jag vill användaren ska kunna bestämma hur lång arrayen ska vara, Jag trodde att det skulle vara så enkelt att göra så här:
Kod:
Scanner keyboard = new scanner (system.in);

int langd =0;
bowling[] players = new bowling[langd]

System.out.println("Ange hur många tävlanden du vill registrera");
langd = keyboard.nextInt();

Men icke sa nicke, programmet ser bra ut i början men när jag registrerar första spelaren får jag fel meddelandet
Om du läser koden rad för rad så inser du varför det blir fel.
1. Du säger att length = 0.
2. Du säger att längden på din array är = length (=0)
Om du sedan ändrar length påverkar inte det längden på din array.
Om du inte vill behöva ange någon längd kan du tex använda en lista som ewallg föreslog, alternativt ArrayList<Bowling> (java.util). Den allokerar automatiskt mer minne när det behövs, och du behöver aldrig bry dig om det själv. Den fungerar som så att den har ett attribut capacity, som från början är 10 och när du har stoppat in 10 element och försöker stoppa in ett 11:te så allokerar den ett nytt minnesblock med plats för 20 (x2) element och kopierar alla element dit.
Du lägger till i slutet med .add(), och accessar ett element med .get().
ArrayList
__________________
Senast redigerad av Joonc 2011-11-07 kl. 12:35.
Citera
2011-11-07, 12:38
  #6
Medlem
Voldemort2s avatar
En vanlig array kan inte dynamiskt allokera minne. Alltså måste du veta hur stor den skall vara då den skapas. Ett alternativ är att använda klassen vector, som dynamiskt kan ändra storleken.
Citera
2011-11-07, 15:16
  #7
Medlem
kelebs avatar
Du har redan fått hjälp om hur du ska ändra i koden för att programmet ska fungera av Kalmar2004.

Ett par saker du bör beakta. Klasser bör (ett väldigt starkt bör) skrivas med stor bokstav. Använder du någon av de "inbyggda" klasserna måste du använda stor bokstav eftersom dessa är skrivna med stor bokstav. I ditt fall, din egenskrivna klass bowling bör du byta namn på till Bowling. Den koden du har kommer även efter att du rättat till felet med ordningen på satserna inte heller att kompilera. Du skriver när du instansierar din keyboard-variabel Scanner med litet s och även klassen System skriver du med litet s.

Angående om vad man ska använda sig av för att strukturerar dina Bowling-element. I din kod du använder verkar det passa bra att använda sig av en array. Men som du märker, måste du fråga användaren hur många element denne vill skapa. Efter att du satt längden på en array kan du inte ändra på längden. Vill du ändra längden måste du skapa en ny array.

Det finns en lösning om man nu inte vet hur många element man vill "bunta ihop" och det är att använda sig av en lista. Fördelen med en lista är att den dynamiskt ändrar storlek när man lägger till ett element. Vilken typ av lista man använder LinkedList, ArrayList eller Vector har i ditt fall troligen mindre betydelse. Troligen passar ArrayList eller Vector bäst för dig. Jag tänkte hänvisa dig till den tutorial som finns om listor i Java's API men jag kan för tillfället inte komma åt den, men du kan läsa en del om det i interfacet List på:
http://download.oracle.com/javase/7/...util/List.html
Och du kan ju också själv googla på Java List tutorial.
Citera
2011-11-09, 17:38
  #8
Medlem
Citat:
Ursprungligen postat av Voldemort2
En vanlig array kan inte dynamiskt allokera minne. Alltså måste du veta hur stor den skall vara då den skapas. Ett alternativ är att använda klassen vector, som dynamiskt kan ändra storleken.

Vector är från stenåldern.
Fördelen med den är att den är trådsäker men jag tror inte riktigt det är ett problem som TS måste tänka på.

Använd dig av List (eller överväg Set då List ofta missbrukas. Ett set är en oordnad mängd utan duplicat).

Kod:
List<Bowling> players = new ArrayList<Bowling>();
players.add(new Bowler("Kalle"));
players.add(new Bowler("Pelle"));
System.out.println(players.size()); //Skriver ut 2

Förövrigt så är jag skeptisk till klassen "bowling". För det första börjar klassnamn alltid med stor bokstav. Sedan borde klassen kanske heta "BowlingPlayer", "BowlingGame", "BowlingBall" eller vad det nu kan tänkas vara.

Lycka till.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in