私の計算クラスでこの余分な信用問題のために、私の他の同級生と私は、ブルートを解くプログラムを構築することに決めました。これらのステップの1つに順列が含まれます。このアルゴリズムを通じて、私は(私は思う)、それは仕事を得るために管理:データ変更はどこですか? - Javaでの順列
public void genPermutations(int[] list, int k){
System.out.println("List: " + Arrays.toString(list));
System.out.println("----------------------");
if(k > list.length){
System.out.println("Not enough elements!");
return;
}
int[] counts = new int[list.length];
for(int i = 0; i < counts.length; i++){
counts[i] = 1;
}
int[] data = new int[k];
permutationHelper(list, counts, data, 0, k);
}
public void permutationHelper(int[] list, int[] counts, int[] data, int index, int k){
if(index == k){
//System.out.println(Arrays.toString(data));
permutations.add(data);
}else{
for(int i = 0; i < list.length; i++){
if(counts[i] == 0){
continue;
}
data[index] = list[i];
counts[i]--;
permutationHelper(list, counts, data, index + 1, k);
counts[i]++;
}
}
}
私はそのリストのk個の要素から作ることができる(整数配列など)の可能な順列の全てを格納ArrayList
を持っています私は関数に渡します。問題は、私がgenPermutations
関数を呼び出すと、関数の外でこれらの順列をすべて出力すると、すべての順列は同じになります。しかし、私がコメントのあるデータをpermutationHelper
関数に表示すると、すべての可能な順列が正しくリストされます。私は後でプログラム内でそれらにアクセスすることができません。私の質問は、なぜ私は関数を終了するときに値が変更されますか?どんな助けでも大歓迎です。
What is printed where the comment is.
What is printed later in the program.
関数の外にすべてを印刷するために使用されるコードは次のとおりです:それはだ場合
for(int i = 0; i < permutations.size(); i++){
System.out.println(Arrays.toString(permutations.get(i)));
}
私は本当に分からない。ここ
はいくつかの写真です知っておく必要があるが、私はちょうど私がそれをちょうどために含めると思った。前もって感謝します。
'data []'配列は1つだけです。あなたは順列を生成するときにそれを上書きし続けます。 –
あなたのスクリーショットにはテキスト出力しか含まれていません。イメージを参照するのではなく、テキストにテキスト出力を追加する方がよいでしょう。 – MrSmith42
ここで質問する前に、デバッグを試してみました。 – MrSmith42