Eclipse java中的二进制加法

Eclipse java中的二进制加法,eclipse,binary,addition,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 =

我用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));
}

}

此功能更简单:

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)
,因为您不希望字符串有负号,是吗?

您在

help1 + help2 = 3
因此,您的方法
stringadd(stringbinary1,stringbinary2)
应该如下所示:

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;
}
我希望这能帮助你

 sum = help1 +help2 +carry;
         if(sum >=2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }
如果总和为2,则附加“0”和进位=1

当总和为3时,加上“1”和进位=1怎么样


永远不会超过4岁

我知道我有点晚了,但我刚刚完成了一项类似的任务,所以对于我这个职位上的任何人来说,我是如何应对的

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;
公营二元教具{
公共静态void main(字符串参数[]){
System.out.println(“输入要转换的值”);
扫描仪inp=新扫描仪(System.in);
int num=inp.nextInt();
字符串结果=”;
while(num>0){
结果=结果+数学地板(num,2);
num=数学四舍五入(num/2);
}
字符串flippedresult=“”;
for(int i=0;i
这需要一个输入并转换成二进制。在这里,我用这个程序添加数字,然后转换回

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;   
}






}
import java.util.Scanner;
公营二元教具{
公共静态void main(字符串参数[]){
扫描仪inp=新扫描仪(System.in);
String DecimalToBinarysting=新字符串();
System.out.println(“要添加的第一个十进制数”);
int num1=inp.nextInt();
字符串二进制1=十进制二进制字符串(num1);
System.out.println(“输入十进制数2”);
int num2=inp.nextInt();
字符串二进制2=十进制二进制字符串(num2);
int patternlength=Math.max[binary1.length[],binary2.length[];
while(binary1.length()=0;i--){
_one的频率_=进位;
如果(二进制1.字符(i)='1'){
_one++的频率;
}
如果(二进制2.字符(i)='1'){
_one++的频率;
}
开关(一个的频率){
案例0;
进位=0;
结果=“1”+结果;
打破
案例1;
进位=0;
结果=“1”+结果;
打破
案例2;
进位=1;
结果=“0”+结果;
布雷克;
案例3;
进位=1;
结果=“1”+结果;
布雷克;
}
}
如果(进位==1){
结果=“1”+结果;
}
系统输出打印项次(结果);
}
公共静态字符串十进制字符串(整数小数1){
字符串结果=”;
while(小数点1>0){
结果=结果+数学floorMod(小数点1,2);
小数=数学四舍五入(小数点1/2);
}
字符串flipresult=“”;
for(int i=0;i
No教授特别要求非常大的数字。但我不期望负signs@E.C然后使用
Long.parseUnsignedLong
即可,除非数字甚至大于
Long
可以容纳的数值(大于
9223372036854775807
)即可!我希望你能接受我的回答