Permalänk
Medlem

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
Permalänk
Medlem

@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?

Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

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.

Permalänk
Medlem

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 { }.

Visa signatur

AMD 5700X@Vatten | asus prime x370pro | Asus 2080 Strix | 2x16GB Kingston Fury Renegade RGB DDR4 3.6GHZ | Lian Li O11d EVO + 2x240 EKWB RAD + 6 Lian Li AL120 | CoolerMaster V850 | NVME 2TB Seagate Firecuda 510 + NVME 1TB WD BLACK + 3 SSD | Samsung Odyssey 49" G9| DELL 2713HM | Varmilo VA69 Clear/brown | Logitech G502 2016.

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

Permalänk
Medlem
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.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Hedersmedlem

Fixade code-taggar åt TS.

Permalänk
Medlem

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