2

多くの助けを借りて、アナグラムを作成し、それらを に追加する方法を開発しましたArrayList

public void f(String s, String anagram, ArrayList<String> array)
{
    if(s.length() == 0)
    {
        array.add(anagram);
        return;
    }
    for(int i = 0 ; i < s.length() ; i++)
    {
        char l = s.charAt(i);
        anagram = anagram + l;
        s = s.substring(0, i) + s.substring(i+l, s.length());
        f(s,anagram,array);
    }
}

問題は、この関数を使用して s を別の sArrayListに追加するループで sを作成しようとすると、void を使用できないというエラーが表示され、メソッドが void になることです。StringArrayListf()

        List<String> Lists = new ArrayList<String>(); //makes new array list
        for(String List : words)
        { //takes values from old array list
            List.trim();
            Lists.add(f(List,"",new ArrayList<String>())); //this is where it doesn't work
        }

もう一度明確にしましょう。この関数を使用してArrayList、アナグラムの s を別の の各位置に挿入したいと考えていますArrayListStringアナグラム リストは、あるリストから別のリストに読み取られる から派生します。メソッドを静的に変更しようとしましたが、うまくいきませんreturn;。メソッド内の も一度削除しましたが、それでも修正されません。

この全体を機能させるにはどうすればよいですか?

4

3 に答える 3

7

f()メソッドがであるため、エラーが発生します。voidつまり、 に追加できる値が返されませんArrayList

呼び出しの応答は、パラメータとして渡されたf()に保存されます。おそらく、それを使用て、そのすべての要素を に追加する必要があります。このようなもの:ArrayListf ArrayListLists

List<String> lists = new ArrayList<String>();
for (String list : words) {
    list.trim();
    ArrayList<String> answer = new ArrayList<String>();
    f(list, "", answer);
    lists.addAll(answer);
}
于 2013-03-13T21:32:24.843 に答える
0

の関数定義f()は、 type の戻り値を示していますvoid。したがって、これを実行しようとしているコードを見ると、次のようになります。

Lists.add(void);

これは明らかに違法です。

あなたの選択は、より大きなスコープで ArrayList を宣言することです。

private List<String> anagrams;

public void f(String s, String anagram) {
  ...
  anagrams.add(anagram);
  ...
}

....

 for(String List : words) {
   //takes values from old array list
   anagrams = new ArrayList<String>();
   List.trim();
   f(list,"");
   Lists.add(anagrams); //this is where it doesn't work
 }
于 2013-03-13T21:36:49.410 に答える
0

F のメソッド ヘッダーは次のようにする必要があります。

public String f(String s, String anagram, ArrayList<String> array)

次に、使用している ArrayList に追加する文字列値を返します。

于 2013-03-13T21:34:20.320 に答える