Я пытаюсь написать код, который генерирует список, содержащий все возможные перестановки заданного массива int.Вызов нестатического метода в статическом классе - java
У меня есть found online a method («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));
}
}
}
Есть * статическая * Метода и есть * экземпляр * метода. Создайте экземпляр 'lang_dist' (' new') и вызовите на него свой метод. –
да, вот что я пытался сделать с бит 'lang_dist d = new lang_dist(); \t while (d.nextPermutation (array)) {... 'из кода выше, но это не решает проблему. Или это неправильный способ создания экземпляра? Извините, я очень новичок в java, и я мог бы пропустить что-то очень очевидное. – yamayama