繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM