gpt4 book ai didi

java - 在静态类中调用非静态方法 - java

转载 作者:行者123 更新时间:2023-12-01 10:13:55 26 4
gpt4 key购买 nike

我正在尝试编写一个代码来生成一个列表,其中包含给定 int 数组的所有可能排列。

我有found online a method (下面代码中的“nextPermutation”)允许这样做,我试图将其实现为基本代码,但它不起作用。

问题是,当我尝试将包含新排列的数组动态添加到列表中时,列表中已存储的所有先前排列都会被新排列替换。

我想这个问题在某种程度上与我的“nextPermutation”是非静态的这一事实有关,但我不知道我应该做什么来解决它。

有什么建议吗?

package lang_dist;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class lang_dist {

public boolean nextPermutation(int[] array) {
// Find longest non-increasing suffix
int i = array.length - 1;
while (i > 0 && array[i - 1] >= array[i])
i--;
// Now i is the head index of the suffix


// Are we at the last permutation already?
if (i <= 0)
return false;

// Let array[i - 1] be the pivot
// Find rightmost element that exceeds the pivot
int j = array.length - 1;
while (array[j] <= array[i - 1])
j--;
// Now the value array[j] will become the new pivot
// Assertion: j >= i

// Swap the pivot with j
int temp = array[i - 1];
array[i - 1] = array[j];
array[j] = temp;

// Reverse the suffix
j = array.length - 1;
while (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}

// Successfully computed the next permutation
return true;
}

public static void main( String[] args )
{


int[] array = {0, 0, 1, 1, 1, 1};


List<int[]> rowList = new ArrayList<int[]>();
List<int[]> results = new ArrayList<int[]>();

lang_dist d=new lang_dist();

while (d.nextPermutation(array)){

System.out.println("Permutation:" + Arrays.toString(array));

results = Arrays.asList(array);

rowList.add(results.get(0));


};

System.out.println("---");
for (int[] row : rowList) {
System.out.println("Row = " + Arrays.toString(row));
}
}


}

最佳答案

(主要)问题是您在每次排列时将结果存储在同一个数组中。因此,rowList 包含对同一数组的 n 个引用。

要(快速)解决问题,您需要为每个排列创建一个新数组:

结果 = Arrays.asList(array.clone());

此外,这里的results是多余的,请使用rowListresults来存储您的排列。

我建议你看看:Are arrays passed by value or passed by reference in Java?Is Java "pass-by-reference" or "pass-by-value"?

关于java - 在静态类中调用非静态方法 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com