我的Java方法不打印任何内容—打印一个数字的所有可能子集,不重复
我写这段代码是为了打印一个数字(n)的所有可能的置换子集,不重复,但我无法理解为什么什么都不打印 i、 e-对于n=3,应输出: 123 132 213 231 312 321 以下是我编写的代码:我的Java方法不打印任何内容—打印一个数字的所有可能子集,不重复,java,Java,我写这段代码是为了打印一个数字(n)的所有可能的置换子集,不重复,但我无法理解为什么什么都不打印 i、 e-对于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 printA
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;
}
公共静态void printAllPerm(int n){
int[]A=新的int[n+1];
printAllRec(n,0,A);
}
公共静态void printAllRec(int n,int i,int[]A){
如果(承诺(i,A)){
如果(i==n){
对于(intj=1;j问题就在这里
if ( promising(i, A) )
在这里,您将0
传递为i
,因为providing
函数返回false,并且不会打印任何内容。在printalrec(..)
中,在A[i+1]=A[1]
处,您的代码总是在调用providing(..)之前以相同数字的数组结束两次
因此您的打印语句永远不会被调用
为printAllRec(..)编写一些测试
这样你就可以调整它来做你想要做的事情。当你在调试器中一步一步地运行它时会发生什么?我看不到任何明显的问题,但显然在某个地方有错误。我用调试器检查了它。我很难理解你期望在每个if语句中发生什么。这段代码看起来太复杂了是的,但是我应该打印一次I==n。我在printAllRec(n,I+1,A)中用1递增I,然后直到I==n才应该打印