【发布时间】:2015-03-23 22:49:09
【问题描述】:
我正在尝试实现Restoring Division 算法,但事情发生了严重错误。这是我的代码:
public static void main(String[] args){
int num = 10;
long den = 2;
long p = num;
int n = 32;
den = den << n;
StringBuilder s = new StringBuilder("");
long q = 0;
for(int i = n; n > 0; n--){
p = (2 * p) - den;
if(s.length() > 0){
s.delete(0, s.length() - 1);
}
s.append(Long.toString(q,2));
if(p >= 0){
s.setCharAt(i, '1');
}else{
s.setCharAt(i, '0');
}
q = Integer.parseInt(s.toString(), 2);
}
System.out.println(q);
}
我收到java.lang.StringIndexOutOfBoundsException: String index out of range: 32 异常。这是因为我试图在一个不存在的位置设置一个字符(或有点技术性)。
我该如何正确地实现它?我可以得到带有前导零的二进制字符串吗?
【问题讨论】:
-
在 if 语句的两个分支中有五行相同的代码。将其放在 if 语句之后,以使您的代码更具可读性。
-
请注意, i 以 32 开头,您在循环中递减 n。这似乎不正确,因为您的字符串在开头是空的,您访问的是位置 32 处的字符。
-
感谢您的指出。我已经对其进行了重构。
-
是的,我已经在我的问题中指出了这一点。
-
我的意思是你应该考虑你的变量。您在不使用它的情况下减少 n,并使 i 保持不变。这没有任何意义,尽管我不知道所需的算法。