混合进制,列举所有可能

若将a1、a2、a3排成一列,a1是二进制,a2是四进制,a3是六进制,书写代码输出a1、a2、a3形成的各种组合。

结果如下:

000 001 002 003 004 005 010 011 012 013 014 015 
020 021 022 023 024 025 030 031 032 033 034 035 
100 101 102 103 104 105 110 111 112 113 114 115 
120 121 122 123 124 125 130 131 132 133 134 135 

程序代码如下:

package me;

public class ScanAllProp {
      private int[] num = {0, 0, 0};
      private int[] radix = {2, 4, 6};
 
      public void method1() {
            int index = 0;//用于排版
            for (int a1=num[0]; a1<radix[0]; a1++) {
                  for (int a2=num[1]; a2<radix[1]; a2++) {
                        for (int a3=num[2]; a3<radix[2]; a3++) {
                              System.out.print(a1 + "" + a2 + "" + a3 + "\t");
                              index++;
                              if (index % 12 == 0) {
                                    System.out.println();
                              }
                        }
                  }
            }
       }
 
      public void method2() {
            int index = 0;//用于排版
            boolean flag = true;//控制是否结束循环
            while (flag) {
                  System.out.print(num[0] + "" + num[1] + "" + num[2] + "\t");
                  index++;
                  if (index % 12 == 0) {
                        System.out.println();
                  }
   
                  for (int i=num.length-1; i>=0; i--) {
                        if (num[i] == radix[i] - 1) {
                              num[i] = 0;
                        }
                        else {
                              num[i] = num[i] + 1;
                              break;
                        }
                        if (i == 0) {
                              flag = false;
                        }
                  }
            }
      }
 
      public static void main(String[] args) {
            ScanAllProp prop = new ScanAllProp();
            prop.method1();
            System.out.println("===================================");
            prop.method2();
      }
}
注释:

1.method1用于数目较少的数字之间的组合,代码清晰;

2.method2用于数目较大的数字之间的组合。