java - 生成所有可能的二进制组合

标签 java eclipse for-loop methods binary

我正在尝试为两个字节 ex 生成所有可能的二进制组合。

00000000 00000001
00000000 00000010
00000000 00000011

我有正在学习的类(class),但显然它根本不起作用。我无法获得返回生成输出的方法。

我让下面的代码可以正常工作,但只计算 1 个字节。我将如何更改它以计算 2 个字节的所有可能结果?

package referenceCode;

public class BinaryGenerator {

private int val = 0; private int[] values = new int[]{0,1}; //This method converts the Binary Pattern output into a char[] so that it can be printed out to a file public int[] binaryPatternToString() { int numBits = 8; values[0] = 0; values[1] = 1; int[] returned = null; for (int i = 1; i < numBits; i++) { returned = binaryGenerator(i); for (int j = 1; j < numBits; j++) { } } return returned; } private int[] binaryGenerator(int iVal) { int[] moreValues = new int[values.length * 2]; int start = (int)Math.pow(2, iVal); for (int j = 0; j < values.length; j++) { moreValues[j * 2] = values[j] << 1; moreValues[j * 2 + 1] = values[j] << 1 | 1; } values = moreValues; for (int value : values) { System.out.println(Integer.toBinaryString(value)); } return moreValues; }}

使它成为递归方法而不是带有 for 循环的方法会是更好的主意还是更有效?

最佳答案

您可能知道所有 java 整数都基于二进制数。因此,对于 2 个字节,最大数为 2^16 = 65536。只需遍历所有数字并获取它们的二进制值,必要时将它们补零,最后将它们存储在列表中。这将返回所有可能的 2 字节二进制数。对于更多字节,只需增加字节变量即可。

实现:

int bytes = 2;
int nBits = bytes * 8;
int maxNumber = 1 << nBits; //this equals 2^nBits or in java: Math.pow(2,nbits)
ArrayList<String> binaries = new ArrayList<>();
for (int i = 0; i < maxNumber; i++) {
    String binary = Integer.toBinaryString(i);
    while (binary.length() != nBits) {
        binary = "0" + binary;
    }
    binaries.add(binary);
}
System.out.println(binaries);

为了清楚起见,包含了 bytes 和 nBits 变量。

您还可以使用递归方法。从一个空字符串开始,递归地在字符串的开头添加 0 或 1,然后继续,直到达到所需的位数:

public static ArrayList<String> getBinaries(int bits, String current) {
    ArrayList<String> binaries = new ArrayList<>();

    if (current.length() == bits) {
        binaries.add(current);
        return binaries;
    }

    //pad a 0 and 1 in front of current;
    binaries.addAll(getBinaries(bits, "0" + current));
    binaries.addAll(getBinaries(bits, "1" + current));

    return binaries;
}

您可以调用此函数:getBinaries(16,"") 2 个字节。

关于java - 生成所有可能的二进制组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32233138/

相关文章:

eclipse - Eclipse中 “move to left editor”和 “move to right editor”的快捷方式?

eclipse - 在 Eclipse 中更改字符串的大小写

c - for 循环的第三个表达式 (C) 中是否可以包含 IF 语句?

Ruby 中的 Java 兼容 REST 客户端

java - 什么时候在下面的代码中调用 super()

java - 快速查找某个范围包含数字的方法

java - eclipse中的sql更新查询

javascript - 只有第一个对象保存在 javascript for 循环中

java - 为什么我的变量在循环中没有被改变?

java - 如何使用 JTextField 输入作为新类实例的标识符?