Permalänk

Java: Tärnings program

Har gjort ett program med tärningar, där användaren matar in antalet sidor tärningen ska ha, och hur många kast man ska göra, sedan ska programmet berätta hur många gånger varje sida har kommit upp (5st 1or, 10st 6or osv.) Men jag får en error på rad 34
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5"

System.out.print("Hur många sidor tärningen ska ha: "); int sides = input.nextInt(); int[] dices = new int[sides]; String all = ""; System.out.print("Hur många tärningskast du vill göra: "); int diceRolls = input.nextInt(); System.out.println("Tärningskast:"); for (int i = 0; i <= diceRolls; i++) { int x = (int) (1 + Math.random() * sides); System.out.println(x); String y = Integer.toString(x); all = all + y; } System.out.println(all); for (int i = 1; i <= sides; i++) { dices[i] = StringUtils.countMatches(all, Integer.toString(i)); //HÄR är errorn } System.out.println("Det blev totalt: "); for (int i = 0; i <= sides; i++) { System.out.println(i + 1 + "\t" + dices[i]); }

Varför får jag den errorn? Jag fattar verkligen inte...

Visa signatur

We all got a chicken-duck-woman-thing waiting for us

CPU: Intel Core i7 10700K
GPU: Nvidia GTX 1080
RAM: DDR4 16 GB

Permalänk
Medlem
Skrivet av MariusFranzen:

Har gjort ett program med tärningar, där användaren matar in antalet sidor tärningen ska ha, och hur många kast man ska göra, sedan ska programmet berätta hur många gånger varje sida har kommit upp (5st 1or, 10st 6or osv.) Men jag får en error på rad 34
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5"

System.out.print("Hur många sidor tärningen ska ha: "); int sides = input.nextInt(); int[] dices = new int[sides]; String all = ""; System.out.print("Hur många tärningskast du vill göra: "); int diceRolls = input.nextInt(); System.out.println("Tärningskast:"); for (int i = 0; i <= diceRolls; i++) { int x = (int) (1 + Math.random() * sides); System.out.println(x); String y = Integer.toString(x); all = all + y; } System.out.println(all); for (int i = 1; i <= sides; i++) { dices[i] = StringUtils.countMatches(all, Integer.toString(i)); //HÄR är errorn } System.out.println("Det blev totalt: "); for (int i = 0; i <= sides; i++) { System.out.println(i + 1 + "\t" + dices[i]); }

Varför får jag den errorn? Jag fattar verkligen inte...

Här är väl själva problemet:

for (int i = 1; i <= sides; i++)

om du t.ex. har en tärning med 6 sidor så kommer du räkna 1,2,3,4,5,6. En array med 6 platser har dock index 0,1,2,3,4,5. Därav att det blir fel.

Sedan, om man ska vara petig så är "dice" redan plural (singular: "die").

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Hedersmedlem

Inte lätt att hjälpa när du inte klistrat in 34 rader...

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Skrivet av giplet:

Inte lätt att hjälpa när du inte klistrat in 34 rader...

Jag skrev en kommentar där errorn blev

Visa signatur

We all got a chicken-duck-woman-thing waiting for us

CPU: Intel Core i7 10700K
GPU: Nvidia GTX 1080
RAM: DDR4 16 GB

Permalänk
Hedersmedlem
Skrivet av MariusFranzen:

Jag skrev en kommentar där errorn blev

Evil Penguin är något på spåren här ovan.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Permalänk
Medlem

Vad är tanken med ditt svar? Utan någon kommentar till den där koden tror jag inte att en nybörjare i Java som har problem med array-indexering får mycket ut av ett C# exempel som använder listor.

Permalänk
99:e percentilen
Skrivet av evil penguin:

Här är väl själva problemet:

for (int i = 1; i <= sides; i++)

om du t.ex. har en tärning med 6 sidor så kommer du räkna 1,2,3,4,5,6. En array med 6 platser har dock index 0,1,2,3,4,5. Därav att det blir fel.

Skrivet av MariusFranzen:

Jag skrev en kommentar där errorn blev

Yes, ett klassiskt OBOE. Du kommer tänka fel på liknande sätt många gånger, så det är bra att redan nu lära sig att det är ett väldigt enkelt misstag att göra.

Tror det bästa är om du själv kan klura ut hur du ska lösa problemet, så att du verkligen förstår hur for fungerar.

Visa signatur

Skrivet med hjälp av Better SweClockers