私はしばらくの間、さまざまなことを試してきましたが、なぜ私の論理が間違っているのかわかりません。意味がありません。
次の擬似コードに基づいてプログラムを作成しようとしています。
文字列内の文字をランダムに並べ替える次の疑似コードを Java プログラムに変換します。
- 単語を読みます。
- ループ word.length() 回を繰り返します
- 単語内のランダムな位置 i を選択しますが、最後の位置ではありません。
- 単語内のランダムな位置 j > i を選択します。
- 位置 j と i の文字を入れ替えます。
- 単語を印刷します。
- 次に、文字列を次のように置き換えます。
first + word.charAt(j) + middle + word.charAt(i) + last
これは私がこれまでに持っているものです:
package assignment4;
import java.util.Scanner;
public class P4Point7 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Please enter a word: ");
String word = in.next();
in.close();
int wordLength = word.length(); // Gets the word.Length
int x = 1; // Primes the loop
while (x <= wordLength) {
int i = (int) ((Math.random() * wordLength) - 1); // Gets a random letter i that is not the last letter
int j = (int) (Math.random() * (wordLength - i)) + i; // Gets a random letter j after i
String first = word.substring(0, i); // Gets first part of word
String middle = word.substring(i + 1, j); // Gets middle part of word
String last = word.substring(j + 1, wordLength); // Gets last part of word
x++; // Increments the loop
String status = first + word.charAt(j) + middle + word.charAt(i) + last; // Swaps i and j in the word
System.out.println(status);
}
}
}
私が抱えている問題は
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at assignment4.P4Point7.main(P4Point7.java:21)
「ワッフル」という単語でプログラムをテストしています。