コードは、長さ = 6 の単語に対して正常に機能します。しかし、7 文字の単語を入力すると、このスタック オーバーフロー エラーがスローされます。これを解決する方法はありますか?このコードでは、ジェネレーター関数は単語の「i 番目」の要素を最後の要素と交換します。 . 最初のパスで 'rac' が生成され、2 番目のパスで 'cra' が生成されます。これら 2 つの新しい単語がパラメーターとして 'check' 関数に渡されます。'generator' 関数が初めて呼び出されると、入力ワードが arraylist に追加されることに注意してください。その後、単語が配列リストに存在しない場合に限り、単語が配列リストに追加されます。つまり、ジェネレータ関数は、新しい単語が生成されたときにのみ呼び出されます。これで、「rac」が生成されて「check」に渡され、false が返されます。これは、単語が存在せず、ジェネレーター関数が呼び出されることを意味します。'rac' は 'car' と 'rca' を生成しますが、'car' は既に存在します。したがって、「ジェネレーター」関数にパラメーターとして渡されることはありません。配列リスト内の単語の存在は、終了条件として機能します。
import java.util.*;
import java.io.*;
class progx
{
static ArrayList<String> word = new ArrayList<String>();
public static void main(String[] args) throws IOException
{
progx ob = new progx();
ob.input();
}
void input() throws IOException // this function takes the input
{ // from user and calls "generator" function
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("enter word");
String s = in.readLine();
progx obj = new progx();
obj.generator(s); // call 'generator' function
}
void generator(String s) throws IOException
{
progx ob = new progx();
String output = "";
boolean c = false;
word.add(s); // adds the word to arraylist
int i, j, l = s.length(), l2 = l - 1;
char temp;
char[] b = new char[l];
for (i = 0; i < l; i++)
{
b[i] = s.charAt(i); // initializing each element in array
} // with the ith character of the input string
i = 0; // re-initializing 'i' for the while loop
while (i < l)
{
temp = b[i]; // swapping ith character with last element
b[i] = b[l2];
b[l2] = temp;
output = (ob.convertArray(b));// storing the new word in 'output'
c = ob.check(output);// checking whether the elemnt is present in
// arraylist
if (c == false)// if the word is not present, then call the 'generator'
// function
{
System.out.println(output);
ob.generator(output);
}
for (j = 0; j < l; j++) // re-initialising the array as the swapping
{
b[j] = s.charAt(j);
} // might change the position characters
i++; // of the original input String "s"
}
}
String convertArray(char[] s) // array converter- converts array to string
{
String n = "";
for (int i = 0; i < s.length; i++)
{
n = n + s[i];
}
return n;
}
boolean check(String output) // function that checks presence
{ // of the generated word in the array
boolean present = word.contains(output);
return present;
}
}