java中的二进制加法

时间:2017-02-18 20:16:09

标签: eclipse binary addition

我在java中编写了一个二进制加法程序。但结果有时不对。
例如,如果我添加1110 + 111。结果应为10101 但我的节目抛出10001 也许你们其中一个人发现了这个错误。

 import java.util.Scanner;

 public class BinaryAdder { 
 public static String add(String binary1, String binary2) {
    int a = binary1.length()-1;
    int b = binary2.length()-1;
    int sum = 0;
    int carry = 0;


    StringBuffer sb = new StringBuffer();
    while (a >= 0 || b >= 0) {
        int help1 = 0; 
        int help2 = 0;
        if( a >=0){
        help1 = binary1.charAt(a) == '0' ? 0 : 1;
        a--;
    }  if( b >=0){
        help2 = binary2.charAt(b) == '0' ? 0 : 1;
        b--;
    }
         sum = help1 +help2 +carry;
         if(sum >=2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }

    }
    if(carry == 1){
        sb.append("1");
    }

    sb.reverse();
    String s = sb.toString();
    s = s.replaceFirst("^0*", "");

    return s;
}


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

}

4 个答案:

答案 0 :(得分:0)

这个功能简单得多:

public static String binaryAdd(String binary1,String binary2){
    return Long.toBinaryString(Long.parseLong(binary1,2)+Long.parseLong(binary2,2));
}

如果您不期望非常大的数字,可以将Long.parseLong更改为Integer.parseInt,您也可以将parse(Long/Int)替换为parseUnsigned(Long/Int),因为您不希望自己的字符串你有减号吗?

答案 1 :(得分:0)

时你没有考虑这个案子
help1 + help2 = 3

所以你的方法String add(String binary1, String binary2)应该是这样的:

public static String add(String binary1, String binary2) {
    int a = binary1.length()-1;
    int b = binary2.length()-1;
    int sum = 0;
    int carry = 0;


    StringBuffer sb = new StringBuffer();
    while (a >= 0 || b >= 0) {
        int help1 = 0; 
        int help2 = 0;
        if( a >=0){
        help1 = binary1.charAt(a) == '0' ? 0 : 1;
        a--;
    }  if( b >=0){
        help2 = binary2.charAt(b) == '0' ? 0 : 1;
        b--;
    }
         sum = help1 +help2 +carry;
         if (sum == 3){
            sb.append("1");
            carry = 1;
         }
         else if(sum ==2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }

    }
    if(carry == 1){
        sb.append("1");
    }

    sb.reverse();
    String s = sb.toString();
    s = s.replaceFirst("^0*", "");

    return s;
}

我希望这可以帮到你!

答案 2 :(得分:0)

 sum = help1 +help2 +carry;
         if(sum >=2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }

如果sum为2,则追加" 0"并且携带= 1

当总和为3时,追加" 1"并且携带= 1

绝不会是4或更高

答案 3 :(得分:0)

知道我有点迟了但我刚刚完成了类似的任务,所以对我这个位置的任何人来说,这就是我如何处理它...

import java.util.Scanner;

public class Binary_Aids {
public static void main(String args[]) {
    System.out.println("Enter the value you want to be converted");
    Scanner inp = new Scanner(System.in);
    int num = inp.nextInt();

    String result = "";

    while(num > 0) {
        result = result + Math.floorMod(num,  2);
        num = Math.round(num/2);

    }

    String flippedresult = "";
    for(int i = 0; i < result.length(); i++) {
        flippedresult = result.charAt(i) + flippedresult;
    }

    System.out.println(flippedresult);


}
}

这需要输入并转换为二进制。到这里之后,我用这个程序添加数字然后转换回来......

import java.util.Scanner;

public class Binary_Aids {
public static void main(String args[]) {
    Scanner inp = new Scanner(System.in);

    String decimalToBinaryString = new String();

    System.out.println("First decimal number to be added");
    int num1 = inp.nextInt();
    String binary1 = decimalToBinaryString(num1);




    System.out.println("Input decimal number 2");
    int num2 = inp.nextInt();
    String binary2 = decimalToBinaryString(num2);

    int patternlength = Math.max[binary1.length[], binary2.length[]];

    while(binary1.length() < patternlength) {
        binary1 = "0" + binary2;
    }

    System.out.println(binary1);
    System.out.println(binary2);

    int carry = 0;
    int frequency_of_one;
    String result = "";
    for(int i = patternlength -i; i >= 0; i--) {
        frequency_of_one = carry;
        if(binary1.charAt(i) == '1') {
            frequency_of_one++;
        }
        if(binary2.charAt(i) == '1') {
            frequency_of_one++;

        }

        switch(frequency_of_one) {
        case 0 ;
        carry = 0;
        result = "1" + result;
        break;

        case 1 ;
        carry = 0;
        result = "1" + result;
        break;

        case 2;
        carry = 1;
        result = "0" + result;
        breake;

        case 3;
        carry = 1;
        result = "1" + result;
        breake;
        }
    }

    if(carry == 1) {
        result = "1" + result;

    }
    System.out.println(result);

  }



public static String decimalToBinaryString(int decimal1) {
String result = "";

while(decimal1 > 0) {
    result = result + Math.floorMod(decimal1,  2);
    decimal = Math.round(decimal1/2);
}

String flipresult = "";
for(int i = 0; i < result.length[]; i++) {
    flipresult = result.charAt(i) + flippedresult;
}
return flippedresult;   
}






}