2017-01-29 17 views
2

私は、使用する文字セットを考えて、すべての可能なパスワードの組み合わせを出力する簡単なプログラムを書いています。パスワードは5文字でなければなりませんので、それぞれを5つのforループで置き換えています。何らかの理由で、文字4を置換しようとすると、常に-1の範囲外のStringインデックスが取得されます。なぜこのようなことが起きるのか分かりません。forループの範囲外の部分文字列

コード

char[] charList = new char[]{'a','b','c','d','e','f'}; 
String password = "aaaaaa"; 
for (int char1 = 0; char1 < charList.length; char1++) { 
    password = charList[char1] + password.substring(1, 4); 
    for (int char2 = 0; char2 < charList.length; char2++) { 
     password = password.substring(0) + charList[char2] + password.substring(2, 4); 
     for (int char3 = 0; char3 < charList.length; char3++) { 
      password = password.substring(0, 1) + charList[char3] + password.substring(3, 4); 
      for (int char4 = 0; char4 < charList.length; char4++) { 

       //java.lang.StringIndexOutOfBoundsException: String index out of range: -1 below 
       password = password.substring(0, 2) + charList[char4] + password.substring(4); 

       for (int char5 = 0; char5 < charList.length; char5++) { 
        password = password.substring(0, 3) + charList[char5]; 
        System.out.println(password); 
       } 
      } 
     } 
    } 
} 
+0

は、あなたが操作している上側のラインにのみ3文字国連存在することを意味しtaken.youも1から開始されていない第四caractèreを意味し、排他的ですバグを見つけるためにパスワードを印刷します。 –

+0

各変更後にパスワードを記録して追跡することをお勧めします。 password = password.substring(0)+ charList [char2] + password.substring(2,4);あなたが期待するものではないかもしれない – efekctive

答えて

2

password = password.substring(0, 1) + charList[char3] + password.substring(3, 4);は、パスワードに長さ3の文字列を割り当てます。

次に、文字列に存在しないインデックスにアクセスしようとしているpassword.substring(4)を呼び出しています!

+0

ありがとう、私の部分で簡単な間違い –

0

substringメソッドの最後のインデックスは、あなたのサブ

関連する問題