Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加带点的二进制值,但不带快捷方式_Java - Fatal编程技术网

Java 添加带点的二进制值,但不带快捷方式

Java 添加带点的二进制值,但不带快捷方式,java,Java,我有一个学校项目,在java中添加2个二进制数。二进制数也可以有十进制值。 示例-10.01+10.01=100.1 我不能使用Integer.parseInt(str,基数)这样的快捷方式;(这些项目真的很糟糕)……:'( 我只需要使用字符串和其他东西。我尝试了以下代码,但我在中途迷路了,尤其是要克服小数点对我来说几乎是不可能的:- String a = "101"; String b = "101"; for(int i=0;i<a.length() || i<b.lengt

我有一个学校项目,在java中添加2个二进制数。二进制数也可以有十进制值。

示例-10.01+10.01=100.1

我不能使用Integer.parseInt(str,基数)这样的快捷方式;(这些项目真的很糟糕)……:'(
我只需要使用字符串和其他东西。我尝试了以下代码,但我在中途迷路了,尤其是要克服小数点对我来说几乎是不可能的:-

String a = "101";
String b = "101";
for(int i=0;i<a.length() || i<b.length();i++){
    int digit1 = Integer.parseInt(a.substring(a.length()-1));
    int digit2 = Integer.parseInt(b.substring(b.length()-1));
    if(digit1 == 0 && digit2 ==0 && carry == 0) {sum = 0;carry = 0;}
    if(digit1 == 0 && digit2 ==1 && carry == 0) {sum = 1;carry = 0;}
    if(digit1 == 1 && digit2 ==0 && carry == 0) {sum = 1;carry = 0;}
    if(digit1 == 1 && digit2 ==1 && carry == 0) {sum = 0;carry = 1;}
    if(digit1 == 0 && digit2 ==0 && carry == 1) {sum = 1;carry = 0;}
    if(digit1 == 0 && digit2 ==1 && carry == 1) {sum = 0;carry = 1;}
    if(digit1 == 1 && digit2 ==0 && carry == 1) {sum = 0;carry = 1;}
    if(digit1 == 1 && digit2 ==1 && carry == 1) {sum = 1;carry = 1;}
...//could not continue further
String a=“101”;
字符串b=“101”;

对于(int i=0;i这是工作代码:

注意:我刚刚向您演示了如何添加这些数字。如果您的第一个二进制数有(比如)4位,而第二个二进制数有(比如)10位,则显然此代码不起作用!您必须检查该条件并添加相应的代码。我假设两个数字具有相同的数字。

还要注意for循环条件的变化!

公共类ADDBinary{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
字符串num1=“1101”;
字符串num2=“1010”;
字符串sum=“”;
整数进位=0;
对于(int i=0;i
}

我使用了相同的条件!

首先,一些提示。 查看您的代码,我可以看到八个格式相同的
。这称为代码重复,需要避免。您基本上是反复输入相同的行,这对您来说是一项更大的工作,使您的代码可读性、适应性和可维护性较差。如果您遇到需要多次执行的操作,以稍微不同的方式,制作一种新的方法来实现这一点

你说它们可以有十进制值。这不是很好的术语,十进制意味着base10。基点是我们在base10中所称的小数点,但因为我们使用的是base2,所以十进制不适用,所以我们称之为基点

关于你的问题:
(删除此内容是因为NullPointer比我快了一步。)

你的实际问题是什么?只要写下8个可能的情况,然后继续一个接一个地添加最后的数字!@Nullpointer我想问题很清楚。这是关于二进制加法的。你可以在这里学习二进制加法->我知道如何添加二进制数..但我不明白你被困在哪里了?为什么你不能一个接一个地添加数字?@Nullpoi恩,在过去的一个小时里,我一直在尝试。但是我迷路了。所以我请求帮助(
public class ADDBinary {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String num1 = "1101";
    String num2 = "1010";
    String sum = "";
    int carry = 0;
    for (int i = 0; i < num1.length() && i < num2.length(); i++) {
        System.out.println("In for loop");
        char digit1, digit2;
        digit1 = num1.charAt(num1.length() - i - 1);
        digit2 = num2.charAt(num2.length() - i - 1);
        System.out.println("Digits="+digit1+digit2);
        if (digit1 == '0' && digit2 == '0' && carry == 0) {
            sum =  sum + "0";
            carry = 0;
        } else if (digit1 == '0' && digit2 == '1' && carry == 0) {
            sum = sum + "1";
            carry = 0;
        } else if (digit1 == '1' && digit2 == '0' && carry == 0) {
            sum = sum + "1";
            carry = 0;
        } else if (digit1 == '1' && digit2 == '1' && carry == 0) {
            sum = sum + "0";
            carry = 1;
        } else if (digit1 == '0' && digit2 == '0' && carry == 1) {
            sum = sum + "1";
            carry = 0;
        } else if (digit1 == '0' && digit2 == '1' && carry == 1) {
            sum = sum + "0";
            carry = 1;
        } else if (digit1 == '1' && digit2 == '0' && carry == 1) {
            sum = sum + "0";
            carry = 1;
        } else if (digit1 == '1' && digit2 == '1' && carry == 1) {
            sum = sum + "1";
            carry = 1;
        }
    }
    if(carry == 1)
        sum = sum + "1";
    System.out.println(new StringBuilder(sum).reverse().toString());

}