-1

这是我要添加到二进制字符串的代码,我在res字符串中得到了正确的值,但在执行结束时它仍然给我一个异常。字符串m1&m2的长度相等,每个为 28。我仍然尝试只运行循环 10 次来验证,但错误仍然存​​在。这适用于 的任何值i,无论两个字符串的实际长度是大于还是小于。

public static String addMantissa(String m1,String m2)
{
    String res=" ";
    int c=0;
    System.out.println("Length is " + m2.length());
    int i=0;
    while(i < m2.length())
    {
        System.out.print(" " + res.charAt(i));
        if(m1.charAt(i)=='1' && m2.charAt(i)=='1')
        {
            if(c==0)
            {
                res+="0";
                c=1;
            }
            else
            {
                res+="1";
                c=1;
            }
        }

        if(m1.charAt(i)=='1' && m2.charAt(i)=='0')
        {
            if(c==0)
            {
                res+="1";
                c=0;
            }
            else
            {
                res+="0";
                c=1;
            }
        }

        if(m1.charAt(i)=='0' && m2.charAt(i)=='1')
        {
            if(c==0)
            {
                res+="1";
                c=0;
            }
            else
            {
                res+="0";
                c=1;
            }
        }

        if(m1.charAt(i)=='0' && m2.charAt(i)=='0')
        {
            if(c==0)
            {
                res+="0";
                c=0;
            }
            else
            {
                res+="1";
                c=0;
            }
        }
        i++;
    }

    return res;
}

提前致谢。

4

3 回答 3

1

您的整个方法可以只替换为一行:

public static String addMantissa(String m1, String m2) {
    return new BigInteger(m1, 2).add(new BigInteger(m2, 2)).toString(2);
}

您的问题中提到的 28 位大小意味着Integer该类可以用于解析,但 usingBigInteger意味着可以处理任何大小的字符串。

您应该使用 JDK 而不是重新发明轮子。

此外,“代码越少越好”是一个很好的口头禅(当然,前提是代码保持清晰),并且该代码具有高密度。

于 2013-04-22T14:53:48.960 回答
0

实际上异常来自该行

 while(i < m2.length())

您需要将其更改为

while(i < m2.length() && i<m1.length())

好像 m1(比如 1)的长度低于 m2(比如 4),而您只检查 m2 的值。然后在第二次迭代中,它将以 2<4 的形式进入循环,当它试图获取 m1.carAt(2)(长度为 1)时,它会抛出 String index out of bounds 异常。

于 2013-04-22T14:33:35.477 回答
0

@ShreyosAdikari 基本上是正确的。

System.out.print(" " + res.charAt(i));

应该在循环结束时调用,因为 res[i] 被填充。也许你的意思是:

System.out.print((" " + res).charAt(i));

但是你不打印最后一个循环的 res。

于 2013-04-22T14:29:42.183 回答