Java 恢复除法算法的实现

Java 恢复除法算法的实现,java,algorithm,Java,Algorithm,我正在尝试实现算法,结果出了严重的问题。这是我的密码: 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 >

我正在尝试实现算法,结果出了严重的问题。这是我的密码:

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);
}
publicstaticvoidmain(字符串[]args){
int num=10;
长den=2;
长p=num;
int n=32;
den=den 0;n--){
p=(2*p)-den;
如果(s.长度()>0){
s、 删除(0,s.length()-1);
}
s、 追加(Long.toString(q,2));
如果(p>=0){
s、 setCharAt(i,'1');
}否则{
s、 setCharAt(i,'0');
}
q=Integer.parseInt(s.toString(),2);
}
系统输出println(q);
}
我得到
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:32
异常。这是因为我正试图将一个角色(或技术上的一点)设置在一个不存在的位置


如何正确地实现这一点?我能得到带前导零的二进制字符串吗?

在这样的过程中,你会涉及任何
字符串,这是非常奇怪的。您使用的是二进制算术,因此请使用整数数据类型和运算符,尤其是位运算符(
&
|
^
>)。每个整数数据类型都实现一个“带前导零的二进制字符串”。特别是在这种情况下,考虑到恢复除法算法的约束条件,输入都是正的

我可能会这样写中心部分:

q = 0;
for(int i = 32; i > 0; i -= 1){
    q <<= 1;
    p = (2 * p) - den;

    if(p >= 0){
        q += 1;
    } else {
        // implicit: q += 0
        p += den;
    }
}
q=0;
对于(int i=32;i>0;i-=1){

q在if语句的两个分支中有五行相同的代码。请将其放在if语句后面的A之前,以使代码更具可读性。请注意,我以32开头,而您在循环中递减n。这似乎不正确,因为您的字符串开头是空的,您可以访问位置32处的字符。感谢您的指点out。我已经重构了它。是的,我已经在我的问题中指出了。我的意思是你应该考虑你的变量。你不用它就减少n,让I保持不变。这毫无意义,尽管我不知道想要的算法。