将所有的8位二进制序列放入一个字符串数组中 Java

3
我想将所有可能的256个二进制位序列放入一个字符串数组中。为了做到这一点,我创建了8个for循环来获取所有可能性。以下是我迄今为止尝试过的内容。
static String[] BitSequences() {    
    int[] result = new int[256];
    for (int a = 0; a < 256; a++) {
        for (int i = 0; i < 2; i++){
            for (int j = 0; j < 2; j++){
                for (int k = 0; k < 2; k++){
                    for (int l = 0; l < 2; l++){
                        for (int m = 0; m < 2; m++){
                            for (int n = 0; n < 2; n++){
                                for (int o = 0; o < 2; o++){
                                    for (int p = 0; p < 2; p++){
                                        result[a] = ; //this part is a problem
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
    String str = Arrays.toString(result);
    System.out.println(str);
    return str;
}

这个方法应该返回一个包含所有可能情况的字符串数组。然而,我不知道如何使用int值制作for循环来插入这些值。打印出来很容易: ' System.out.println(i+j+k+.....+p) ' 希望能得到帮助!


为什么你要这样做?这是作业吗,你不能使用一些内置的API吗? - Sweeper
由于整数是以十进制计算的,因此您可能需要将单个整数转换为字符串并将它们连接在一起。 - user11837869
如果您决定这样做,Arrays.toString(result); 部分就不再需要了。 result 数组需要初始化为字符串数组。 - user11837869
尝试使用result[a] = "" + i + j ... + p";进行转换;请注意,您的索引a会遇到问题。 - Gyro Gearless
2个回答

2
考虑使用内置的二进制字符串转换方法:toBinaryString(int)
static String[] BitSequences() {    
    String[] result = new String[256];
    for (int a = 0; a < 256; a++) {
        result[a] = Integer.toBinaryString(a);
    }
    String str = Arrays.toString(result);
    System.out.println(str);
    return str;
}

2
一个8位的二进制补码整数的范围是从-128127。为了表示该范围,我们可以使用IntStream#rangeClosed
这个答案中,我们可以利用BigInteger来左填充二进制String(由Integer#toBinaryString生成),如果其长度小于8(表示该值为正数)。
否则,该值表示一个负数,其相应的二进制字符串将具有大于8的长度,必须使用String#substring将其截断为8个字符。
最后,Stream<String>可以使用Stream#toArray收集到一个String[]中。
public static String[] generateBitSequences() { 
    return IntStream.rangeClosed(-128, 127)
        .mapToObj(Integer::toBinaryString)
        .map(BigInteger::new)
        .map(b -> String.format("%08d", b))    // Left pad positive values with 0s.
        .map(s -> s.substring(s.length() - 8)) // Remove leading 1s from negative values.
        .toArray(String[]::new);
}

输出:

[10000000, 10000001, ..., 01111110, 01111111]

1
我非常喜欢这种方法的优雅性,尽管我认为引入更高级的概念可能会让提问者难以理解。考虑在这里添加对你正在使用的方法的参考资料。 - Russell Myers
1
@RussellMyers 我感谢你的评论并相应地编辑了答案。谢谢! - Jacob G.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接