Trädvy Permalänk
Medlem
Registrerad
Jun 2013

ArrayIndexOutOfBoundException

public class Trie { Node root = new Node(); public void put(String k) { Node temp = root; char[] chars = k.toCharArray(); if (temp.isEmpty()) { for (int i = 0; i < chars.length; i++) { if (i == chars.length - 1) temp.add(chars[i], 1); else { temp.add(chars[i], 0); temp = temp.Children[0]; } } } else { for (int i = 0; i < chars.length; i++) { if (temp.Children[chars[i] - 'a'] == null) { if (i == chars.length - 1) temp.add(chars[i], 1); else { temp.add(chars[i], 0); temp = temp.Children[chars[i] - 'a']; } } else { if (temp.Children[chars[i] - 'a'].key == chars[i]) { if (i == chars.length - 1) temp.Children[chars[i] - 'a'].value++; temp = temp.Children[chars[i] - 'a']; } else { if(i == chars[i]) temp.add(chars[i], 0); temp.add(chars[i], 1); temp = temp.Children[chars[i] - 'a']; } } } } } }

Sedan när jag kör får jag

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 65182
at Trie.put(Trie.java:30), varför får jag error där och hur åtgärdar jag det? Uppgiften handlar om att göra en trie och jag lägger noder för varje char

La till code-taggar

Chassi:Fractal Define r4 CPU:i5 4670k@3.4Ghz CPUkylare:Noctua D14 MB:Gigabyte GA-z87x-D3H GPU:ASUS GeForce GTX 770 PSU:Fractal Design Tesla R2 650W 80+guld Lagring: Seagate Barracuda 500GB & Corsair Neutron 240GB Tillbehör:Benq xl2411t | Sidwinder x4 |Intellimouse explorer 3.0

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2011

@T0MT0M:

Börja med att använda [code]-taggarna runt din text så man kan se exakt vad du ger kompilatorn Vidare verkar det onekligen som att detta inte är allt du skrivit. Du använder dig av andra klasser som du fått givna och/eller gjort själv förutom Tier?

Linux: the operating system with a CLUE; Command Line User Environment.

GNU/Linux

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Precis som föregående inlägg talar, det är svårt att läsa din kod och var/hur problemet uppstår. Men ArrayIndexOutOfBoundException betyder att du försöker accessa ett index(element) som inte finns i array:en. T ex -1 eller något större än arrayens längd-1.
Längden är inte samma som index, då arrayer börjar på 0. t ex:

array1 = {"h","e","j"}

Har indexen 0,1,2
Har elementen h,e,j
Längden är alltså 3 element, men bara index 0,1,2.

Så om du försöker nå det sista elementet med array1[3] får du IndexOutOfBounds eftersom det indexet inte finns.

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Feb 2007

På flera ställen förekommer en if-sats följt av flera rader kod. Ifall samtliga rader kod endast ska köras om if-satsen är sann så behöver du måsvingar { }.

AMD 1800X@Noctua NH-U12F | asus prime x370pro | MSI ARMOR 1070 8GB| 2x8GB Corsair Vengeance DDR4 3GHZ | NZXT H440 | CoolerMaster V850 | SSD 120GB+240GB*2 | DELL 2713HM | DELL 2209WA | Coolermaster quickfire | Razer Deathadder 2013.

Phenom X6 1045T | Corsair TWIN2X PC6400C4DHX 2x2GB + Crucial Ballistix Sport 2x2GB | Gigabyte ma785gmt-us2h | Silverstone Temjin 08 | Corsair VX450

Trädvy Permalänk
Medlem
Registrerad
Maj 2013
Skrivet av T0MT0M:

Använd [ code ]-taggarna, det hjälper oss som försöker klura ut vad felet är.
Du har dessutom fått ett radnummer i din stacktrace, d.v.s vid rad 30? Vi vet inte vart rad 30 är, eftersom vi inte ser om du har mer kod ovanför denna snutt som du tilldelat oss.

Kommentera på den raden som felmeddelandet säger att det inträffat på, detta gör du med dubbla forward-slash "// HÄR" t.ex.

M-ITX: Fractal Design Node 304 Gigabyte H97N i7 4790k Msi GTX980 Gaming Ballistix Sport 16GB @ 1600MHz

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Okt 2006

Fixade code-taggar åt TS.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Apr 2010

lite svårt att se vilken rad 30 är då något lätt kan ha hänt med formateringen. Men om jag räknar rätt har det att göra med att den string som kommer in i funktionen råkar ha längd 0 vilket göra att när du tar 0-1 blir det fel. du bör kolla av att det som faktiskt kommer in har ett värde