Java 两个二进制数的加法

Java 两个二进制数的加法,java,binary,addition,Java,Binary,Addition,我试图通过将数字放入char数组中来压缩每个数字,并使用if条件对每个数字进行压缩。应涵盖每个结果,并将每个结果保存在字符串result中,但整个操作的结果始终为空。Java调试器不工作,我不明白为什么它不工作 import java.util.Scanner; public class BinaryAdder { public static String add(String binary1, String binary2) { String result = ""

我试图通过将数字放入char数组中来压缩每个数字,并使用if条件对每个数字进行压缩。应涵盖每个结果,并将每个结果保存在字符串
result
中,但整个操作的结果始终为空。Java调试器不工作,我不明白为什么它不工作

import java.util.Scanner;

public class BinaryAdder {
    public static String add(String binary1, String binary2) {

        String result = "";
        char[] safea = binary1.toCharArray();
        char[] safeb = binary2.toCharArray();

        int lb1 = binary1.length() - 1;
        int lb2 = binary2.length() - 1;
        char reminder = 0;

        while (lb1 != 0 || lb2 != 0) {
            if (safea[lb1] == 0 && safeb[lb2] == 0 && reminder == 0) {
                result += "0";
                lb1--;
                lb2--;
            } else if (safea[lb1] == 1 && safeb[lb2] == 0 && reminder == 0) {
                result += "1";
                lb1--;
                lb2--;
            } else if (safea[lb1] == 1 && safeb[lb2] == 1 && reminder == 0) {
                result += "0";
                reminder = 1;
                lb1--;
                lb2--;
            } else if (safea[lb1] == 1 && safeb[lb2] == 1 && reminder == 1) {
                result += "1";
                reminder = 1;
                lb1--;
                lb2--;
            } else if (safea[lb1] == 1 && safeb[lb2] == 0 && reminder == 1) {
                result += "0";
                reminder = 1;
                lb1--;
                lb2--;
            } else if (safea[lb1] == 0 && safeb[lb2] == 1 && reminder == 1) {
                result += "0";
                reminder = 1;
                lb1--;
                lb2--;
            } else if (safea[lb1] == 0 && safeb[lb2] == 1 && reminder == 0) {
                result += "1";
                lb1--;
                lb2--;
            } else if (safea[lb1] == 0 && safeb[lb2] == 0 && reminder == 1) {
                result += "1";
                lb1--;
                lb2--;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Summand:  ");
        String input1 = scan.next("(0|1)*");
        System.out.print("Summand:  ");
        String input2 = scan.next("(0|1)*");
        scan.close();
        System.out.println("Result: " + add(input1, input2));
    }

}

您可以使用将位解析为整数。您需要使用2的基数:

public static String add(String binary1, String binary2) {
    int i1 = Integer.parseInt(binary1, 2);
    int i2 = Integer.parseInt(binary2, 2);
    return Integer.toBinaryString(i1 + i2);
}

“safea[lb1]==0”是错误的。您需要的是“safea[lb1]=='0'”,即比较表示“0”的字符,而不是将字符与序号0进行比较。(对于所有其他比较,当然是相同的)还有更多的问题(例如,结果反转)-但这就是导致结果全部为空的问题。为什么调试器不能工作?这看起来不必要地复杂,无法“手动”调试您使用的是字符数组,但在比较时使用的是整数值。使用字符值“1”、“0”。如果一个字符串变小或变大,那么就没有其他问题了。如果你不处理这个问题,那么也可以反转结果。