比较两个char数组,每个数组代表一个二进制数

时间:2015-11-30 22:47:41

标签: java arrays binary compare

我需要编写一个比较两个二进制数的方法。我将二进制数存储在字符数组中,因此我可以存储大数字(我不能使用BigInteger类或任何其他包)。

说明事项的例子:

char[] num1 = {'1','1','0'}
char[] num2 = {'1','1','1'}

如果它们相等,我需要返回0,如果是<则需要返回-1。 b和1如果a> B'/ P>

这是我采取的方法:

 static int compare(char[]a, char[]b) {
    //If arrays lengths aren't equal I already know, one is bigger then the other 
    int a_len = a.length;
    int b_len = b.length;
    int a_bits = 0;
    int b_bits = 0;
    if (a_len > b_len)
        return 1;
    if (b_len > a_len)
        return -1;
    //I count the number of bits that are 1 in both arrays
    for (int i = 0; i < a.length; i++) {
        if (a[i] == '1') a_bits++;
        if (b[i] == '1') b_bits++;
    }
    if(a_bits>b_bits)
        return 1;
    if(b_bits>a_bits)
        return -1;
    return 0;
}

据我了解,这适用于所有情况,但位数相等的情况(例如1100大于1001)。

我以为我可以在每个数组的for循环中添加索引并从那里开始工作,但我开始认为我可能会过度复杂化。这甚至是一个很好的方法吗?我开始怀疑它。任何见解都表示赞赏

3 个答案:

答案 0 :(得分:1)

我会寻找第一个索引,其中一个数字为1,而另一个数字为0。您可以使用以下命令替换位计数循环(保持长度检查):

for (int i = 0; i < a.length; i++) {
    if (a[i] == '1' && b[i] == '0') return 1;
    if (b[i] == '1' && a[i] == '0') return -1;
}
return 0;

答案 1 :(得分:0)

使用一些转换和类Integer提供的二进制parseInt,无论数组的大小如何,都可以进行简单的比较。 (我要小心检查数组的长度,因为如果你在一个数组中有前导零,这可能会导致一些比较错过。)

String first = new String(a);
String second = new String(b);
int firstint = Integer.parseInt(first, 2);
int secondint = Integer.parseInt(second, 2);
if(firstint > secondint)
    return 1;
if(firstint < secondint)
    return -1;
return 0;

答案 2 :(得分:0)

另一种方法如下:

  1. 将字符数组转换为字符串。
  2. 将生成的String转换为int。
  3. 从结果int
  4. 中计算出逻辑

    它始终有效,您可以打印出最终的转换。

    希望这有帮助。

    public static void main(String[] args) {        
    
        char[] num1 = {'1','1','0'};
        char[] num2 = {'1','1','1'};
    
        System.out.println(compare(num1, num2));
    
    }
    
    public static int compare(char[]num1, char[]num2) {
        // Convert Array of Characters to String
        String one = String.valueOf(num1);
        String two = String.valueOf(num2);
        // Convert to Integer (Binary to Decimal Conversion to base2) 
        int a = Integer.parseInt(one,2);
        int b = Integer.parseInt(two,2);
    
        int result = 0;         // return result as equals i.e. 0.
        if(a > b) {             // Yes.  Curly brackets are important in Java
            result = 1;
        } else if(a < b){       
            result = -1;
        }
    
        return result;          // Use only one return, i.e. a variable.
    }