0

現在、関数から返すArrayListをメイン関数の新しいArrayListに必死に取得しようとしています...

コード スニペットは次のとおりです。

public static ArrayList<String> permute(String begin, String end) {
ArrayList<String> al=new ArrayList<String>();
//filling bla
return al;
}

メイン関数で関数を呼び出す場所は次のとおりです。

ArrayList<String> arr =permute("","abc");

残念ながら arr は空で、それを機能させる方法がわかりません:(

前もって感謝します

編集:完全なコードは次のとおりです。

import java.util.*;
class Problem24 {

    public static ArrayList<String> permute(String begin, String end) {
        ArrayList<String> al=new ArrayList<String>();
        if (end.length() <= 1) {
            String s=begin+end;
            al.add(s);
        } else {
            for (int i = 0; i < end.length(); i++) {
                try {
                    String newString = end.substring(0, i) + end.substring(i + 1);
                    permute(begin + end.charAt(i), newString);
                } catch (StringIndexOutOfBoundsException exception) {
                    exception.printStackTrace();
                }
            }
     }
     return al;
  }
    public static void main (String[] args)
    {
        ArrayList<String> arr =permute("","abc");
            System.out.println(arr.get(0));
    }
}
4

6 に答える 6

2

ArrayList は空ですが、null ではありません。これは、戻り部分が機能したことを意味します。メソッドからの値を使用するには、メソッド内の ArrayList を埋める必要があります。

ps: List list = new ArrayList() または List list = permute("", "abc") を使用する必要があります。これは、依存性注入の単純なバージョンであり、プログラムのより優れた設計です。

于 2013-02-28T13:10:24.087 に答える
1

再帰呼び出しからアイテムを追加していません。

al.addAll を permute 呼び出しに追加してみてください:

al.addAll(permute(begin + end.charAt(i), newString));
于 2013-02-28T13:19:13.433 に答える
1

明らかに// filling bla部品に問題があります。

// filling blaコードをに置き換えることから始めて、al.add("TEST");何かが得られるかどうかを確認します。

また、メソッドは静的であり、ソース配列は渡されません。これは、コードがこれらの文字列を何らかの形で並べ替えることになっていることを示唆しています。静的配列を操作している可能性があります (つまり、開始と終了の間のすべての要素を並べ替えます)、ソース配列は空ですか?

于 2013-02-28T12:57:05.883 に答える
1

値を返す前に、alリスト に入力していることを確認してください

     al.add(begin);
     al.add(end);
     al.add("any other string");

     return al;
于 2013-02-28T12:54:40.290 に答える
0

メソッド permute を繰り返し呼び出します --- しかし、返されたときに返されたものを使用しません。つまり、permute を呼び出すたびに新しい配列を作成しますが、次の permute() 呼び出しに渡さないため、for ループで取得したものはすべて失われます --- 最終的には空の配列を返します。何も入れていません。

于 2013-02-28T13:41:51.800 に答える
0
import java.util.*;
class Problem24
{

    public static ArrayList<String> permute(String begin, String end)
    {
        ArrayList<String> al=new ArrayList<String>();
        if (endingString.length() <= 1)
        {
            String s=begin+end;
            al.add(s);
        }
        else
        {
            for (int i = 0; i < end.length(); i++)
            {
                try
                {
                    String newString = end.substring(0, i) + end.substring(i + 1);
                    al.add(permute(begin + end.charAt(i), newString));
                }
                catch (StringIndexOutOfBoundsException exception)
                {
                    exception.printStackTrace();
                }
            }
        }
        return al;
    }

    public static void main (String[] args)
    {
            ArrayList<String> arr = permute("","abc");
            System.out.println(arr.get(0));
    }
}

正しい方法で修正したことを願っています。

于 2013-02-28T13:25:27.383 に答える