这是我添加到二进制字符串的代码,我在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;
}
提前致谢。
答案 0 :(得分:1)
您的整个方法只能替换为一行:
public static String addMantissa(String m1, String m2) {
return new BigInteger(m1, 2).add(new BigInteger(m2, 2)).toString(2);
}
您的问题中提到的28位大小意味着Integer
类可能已用于解析,但使用BigInteger
意味着任何大小的字符串可以是处理。
您应该使用JDK而不是重新发明轮子。
此外,“代码较少”是一个很好的口头禅(当然代码仍然清晰),而且这段代码密度很高。
答案 1 :(得分:0)
@ShreyosAdikari基本上是正确的。
System.out.print(" " + res.charAt(i));
应该在循环结束时调用,因为res [i]被填充。 也许你的意思是:
System.out.print((" " + res).charAt(i));
但是你不打印最后一个循环的res。
答案 2 :(得分:0)
实际上,异常来自
行 while(i < m2.length())
您需要将其更改为
while(i < m2.length() && i<m1.length())
好像m1(比如说1)的长度小于m2(比如说4)而你只检查m2的值。然后在第二次迭代中,它将以2&lt; 4的形式进入循环,当它试图获取m1.carAt(2)(作为长度1)时,它将抛出String index超出边界的异常。