有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用蛮力生成所有可能的二进制数组合作为数组?

我想使用蛮力算法来生成{0,1}作为数组的所有可能组合。 例如,我想生成2^3个不同组合的二进制数数组,应该是

{{0,0,0},
{1,0,0},
{0,1,0},
{0,0,1},
{1,1,0},
{0,1,1},
{1,0,1},
{1,1,1}}

如何在java中使用蛮力生成这些数组?如果我的问题不清楚,请告诉我,谢谢


共 (2) 个答案

  1. # 1 楼答案

    首先,您需要提供代码的最小可复制示例。您可以在这里查看:https://stackoverflow.com/help/minimal-reproducible-example

    关于您的问题,使用三个循环可以是一个解决方案:

    import java.util.ArrayList;
    
    public class Main {
        public static void main(String[] args) {
            var combinations = new ArrayList<int[]>();
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    for (int k = 0; k < 2; k++) {
                        combinations.add(new int[] {i, j, k});
                    }
                }
            }
        }
    }
    

    您可以这样打印它们:

    for (var c : combinations) 
    {
        System.out.printf("{%d,%d,%d}%n", c[0], c[1], c[2]);
    }
    
  2. # 2 楼答案

    这应该给你一个想法:

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class BruteForceBinary {
        
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("How many rows do you want? ");
            int rows = scanner.nextInt(); 
            int finalNumber = (int) (Math.pow(2, rows)-1); 
            for (int i = 0; i <=finalNumber; i++ )
            {
                int[] binaryArray = numberToBinaryArray(i,rows);
                
                System.out.print(Arrays.toString(binaryArray));
            }
        }
    
        private static int[] numberToBinaryArray(int i, int rows ) {
            String binaryString = padLeftZeros(Integer.toBinaryString(i), rows);
            int[] numbers = new int[binaryString.length()];
            for (int j = 0; j < binaryString.length(); j++ ) {
                numbers[j] = Integer.parseInt(String.valueOf(binaryString.charAt(j)));
            }
            return numbers;
        }
        
        private static String padLeftZeros(String inputString, int length) {
            if (inputString.length() >= length) {
                return inputString;
            }
            StringBuilder sb = new StringBuilder();
            while (sb.length() < length - inputString.length()) {
                sb.append('0');
            }
            sb.append(inputString);
         
            return sb.toString();
        }
    
    
    }