0

コードは、長さ = 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;
   }
}
4

2 に答える 2