2016-08-02 1 views
-2

私は無作為に与えられた単語を選んでそれをシャッフルする小さな小さなプログラムを作りました。プログラムは私に正しい結果を与えていますが、私はIndexOutOfBoundsExceptionを取得します。どのように修正するのですか?私はこの問題が16行目以降のものだと思う。私のプログラムが私に望む結果を与えても、このIndexOutOfBoundsExceptionを修正するにはどうすればよいですか?

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

あなたの字下げを修正してください...誰かがあなたのコード(教師、面接者、または仲間のプログラマー)を判断するいつか、それを信じてください。そのような混沌とした圧痕はすぐにあなたの目に恐ろしいか過失のプログラマーになります – Dici

+0

夕食を食べて急いでいた。いくつかの自動インデントのショートカットがある場合は、それを使用して嬉しいです。 –

+0

これはありませんが、IDEでインデントされているコードはここでインデントされます。 – Dici

答えて

0

変更:

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

へ:

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

あなたがlnk.size()まですべての方法を反復する場合は、あなたがの範囲外行っているので、私はここに<=から=を削除しました配列

2

Javaのコレクションと配列は独立していますxed 0 - size - 1。ループが0から進行している - 範囲外の例外を発生させるコレクションのサイズ。

このループをこれ以降に変更します。

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

さもないとあなたは 'バブル' の二つの単語との三つの言葉をシャッフルされます:この

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

EDIT

このループを削除するには

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

'カムコーダー'。

+0

または単に 'for(char c:lnk)' – chrylis

+0

もし私がそうするなら、私のプログラムは単語を2回上に上ってしまいます。たとえば、 "bubble"という単語は "lbbebueblbbu"になります。 –

+0

@JohnJayこれは最初のループのためです。最初のループは必要ありません。乱数の「endNum」が2であるとします。これは、選択された単語がバブルになることを意味します。これは、このサイクル全体が2回起こることを意味します。つまり、単語のバブルx2をシャッフルします。 'endNum'まで動いた外側のループを取り除いてうまく動作します。 **(私の編集を参照してください)** –

関連する問題