[英]My Java method is not printing anything - Print all possible subsets of a number without repetition
我写了这段代码来打印一个数字 (n) 的所有可能的排列子集,没有重复,但我不明白为什么没有打印,即对于 n = 3,应该输出:123 132 213 231 312 321
这是我写的代码:
public static void printAllPerm(int n) {
int [] A = new int[n+1];
printAllRec(n, 0, A);
}
public static void printAllRec(int n, int i, int [] A) {
if ( promising(i, A) ) {
if(i == n){
for (int j = 1; j <= n; j++)
System.out.print(A[j] + " ");
System.out.println();
}
else
{
for (A[1] = 1; A[1] <= n; A[1]++) {
A[i+1] = A[1];
printAllRec(n, i+1, A);
}
}
}
}//void printAllRec(int n, int i, int [] A)
public static boolean promising(int n, int [] myArray)
{
for ( int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
if ( (i != j) && ( myArray[i] == myArray[j]) )
return false;
}
}
return true;
}
*** 承诺的方法只是检查一个数字是否重复,即 112 是不允许的,所有数字都必须不同
问题出在这里
if ( promising(i, A) )
在这里,您将0
作为i
传递,因为promising
函数返回 false 并且没有打印任何内容。
在printAllRec(..)
在A[i+1] = A[1]
你的代码总是用相同数量的数组结束了两次调用之前promising(..)
因此,你的print语句不会被调用。
为printAllRec(..)
编写一些测试,这样你就可以调整它来做你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.