私はいくつかの数字の間のすべての切り替えの可能性を計算する再帰的な方法を使用しなければならない学校のためのプロジェクトがあります。 I.E:[1,2] => 1,2および2,1。int []のArrayListの再帰的メソッド
私はこの方法を使用しましたが、コンソール上でソリューションを印刷するだけで正しく動作しているように見えましたが、ArrayListのタブをストックしたいときは(後で使用する必要があります)同じ順序を追加してください。私の例では、1,2と2,1の代わりに1,2と1,2を追加していました。
はここに私のコードは次のとおり
public static void permute(int start, int[] input, ArrayList <int[]> al) {
//This method is recursive, it will open multiple instances of the input tab by calling itself and modify them, then stock tab in ArrayList when the operations are done for this tab.
//ArrayList must be empty.
//Printing tab if iterations for that specific tab are done
if (start == input.length) {
al.add(input);
////////////////////////////////
// For printing tabs in console.
// for(int x: input){
// System.out.print(x);
// }
// System.out.println("");
////////////////////////////////
//End the specific tab loop when it's printed
return;
}
for (int i = start; i < input.length; i++) {
// Changing numbers
int temp = input[i];
input[i] = input[start];
input[start] = temp;
//////////////////////////////////////////////////
// Tests to see algorithm steps
//
// System.out.print("temp : " + temp + " ... ");
// System.out.print("i : "+i + " ... ");
// System.out.print("start : " + start);
// System.out.println("");
// System.out.print("---");
// for(int x: input){
// System.out.print(x);
// }
// System.out.println("");
//////////////////////////////////////////////////
//Changing numbers
permute(start + 1, input, al);
// Changing numbers
int temp2 = input[i];
input[i] = input[start];
input[start] = temp2;
}
}
Iスタート= 0を使用して、入力= {1,2,3}とArrayListの方法が開始される前に空です。
お手数ですが、ありがとうございます!
ありがとうございました! 私のラインとディープコピーの違いをあなたに聞かせてもらえますか?私は、入力参照でディープコピーをいつ使うべきですか? –
オブジェクトへの現在の参照のコピーだけではなく、オブジェクトの実際の新しいコピーを取得したい場合はいつでもディープコピーを使用したいと思うでしょう。後者の場合、基礎となるオブジェクトを参照することで他のコードを修正することはできません。これがなぜ必要なのかを理解するために、 "参照または値によるJavaのパスですか?" – Edd