我的Java方法不打印任何内容—打印一个数字的所有可能子集,不重复

我的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

我写这段代码是为了打印一个数字(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 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才应该打印