2016-08-02 7 views
-2

Ich machte ein kleines Programm, das ein gegebenes Wort zufällig auswählt und dann mischt. Das Programm gibt mir die richtigen Ergebnisse, aber ich bekomme eine IndexOutOfBoundsException. Wie repariere ich es? Ich denke, das Problem ist ab Zeile 16 abwärts.Wie behebe ich diese IndexOutOfBoundsException, obwohl mein Programm mir das gewünschte Ergebnis liefert?

import java.util.Collections; 
import java.util.LinkedList; 
import java.util.Random; 

public class Scramble { 
    public static void main (String[] args) { 
     String[] words= {"hat", "bubble", "camcorder"}; 
     Random rand = new Random(); 
     int endNum = rand.nextInt(3); 
     for (int i=0;i<=endNum;i++) { 
     int alt = endNum; 
     if (alt==0 || alt ==1 || alt==2) { 
      String ChosenWord=words[alt]; 
      LinkedList<Character> lnk = new LinkedList<Character>(); 
      for (int j=0;j<=ChosenWord.length()-1;j++) { 
       lnk.add(ChosenWord.charAt(j)); 
      } 
      Collections.shuffle(lnk); 
      for (int p=0;p<=lnk.size();p++) { 
       char addLet=lnk.get(p); 
       String wholeWord=""+addLet; 
       System.out.print(wholeWord); 
      } 
      } 
     } 
    } 
} 
+3

Fixieren Sie Ihren Einzug bitte ... Glauben Sie es oder nicht, aber eines Tages, wenn jemand Ihren Code (Lehrer, Interviewer oder Mitprogrammierer) beurteilen wird, wird ein solcher chaotischer Einschnitt Sie sofort zu einem schrecklichen oder nachlässigen Programmierer für ihre Augen machen – Dici

+0

ich hatte zu Abend essen und war in Eile. Wenn es wie eine automatische Einrückungsverknüpfung ist, sei es froh, sie zu benutzen. –

+0

Gibt es nicht, aber wenn Ihr Code in Ihrer IDE eingerückt ist, wird er hier eingerückt. – Dici

Antwort

0

Wechsel:

for (int p=0;p<=lnk.size();p++) { 
    char addLet=lnk.get(p); 
    String wholeWord=""+addLet; 
    System.out.print(wholeWord); 
} 

zu:

for (int p = 0;p < lnk.size();p++) { 
    char addLet=lnk.get(p); 
    String wholeWord=""+addLet; 
    System.out.print(wholeWord); 
} 

ich seit = von <= hier entfernt haben, wenn Sie bis lnk.size() den ganzen Weg durchlaufen, werden Sie aus der Grenzen das Array

2

Java-Sammlungen und -Arrays sind inde xed 0 - die Größe - 1. Sie haben die Schleife von 0 gehen - die Größe der Sammlung, die eine Ausnahme außerhalb der Grenzen verursacht.

Ändern Sie diese Schleife von diesem.

for (int p=0;p<=lnk.size();p++) 

Zu diesem

for (int p=0;p<lnk.size();p++) 

EDIT

diese Schleife entfernen:

for (int i=0;i<=endNum;i++) 

Oder werden Sie zwei Worte 'Blase' mischen und drei Worte 'Camcorder'.

+0

Oder einfach 'for (char c: lnk)' – chrylis

+0

Wenn ich das tue, endet mein Programm das Wort zweimal. So wird zum Beispiel das Wort "bubble" "lbbebuebblbbu" –

+0

@JohnJay Das ist wegen der ersten Schleife, die Sie haben. Sie brauchen die erste Schleife nicht. Nehmen wir an, die Zufallszahl 'endNum' ist 2. Dies bedeutet, dass das ausgewählte Wort bubble ist. Dies bedeutet auch, dass dieser ganze Zyklus zweimal stattfinden wird, was bedeutet, dass er die Wortblase x2 mischt. Entfernen Sie die äußere Schleife, die bis EndNum läuft, und es funktioniert gut. ** (Siehe meine Bearbeitung) ** –

Verwandte Themen