Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 StringBuffer循环设置_Java_For Loop_Stringbuffer - Fatal编程技术网

Java StringBuffer循环设置

Java StringBuffer循环设置,java,for-loop,stringbuffer,Java,For Loop,Stringbuffer,我想循环一个StringBuffer,并使用每个char的值来计算输出。调试显示,当我传入10时,sb.length()是4,即使它应该是2。我应该使用不同的方法吗 public double ConvertDecimal(double in) { double out = 0; sb = new StringBuffer(String.valueOf(Math.floor(in)); sb.reverse(); for (int i = 0; i

我想循环一个StringBuffer,并使用每个char的值来计算输出。调试显示,当我传入10时,sb.length()是4,即使它应该是2。我应该使用不同的方法吗

    public double ConvertDecimal(double in) {

    double out = 0;

    sb = new StringBuffer(String.valueOf(Math.floor(in));

    sb.reverse();

    for (int i = 0; i < sb.length(); i++) {

        out += Double.valueOf(sb.charAt(i)) * Math.pow(3,i);

    }

    return Math.floor(out);

}
公共双精度十进制(双精度){
双输出=0;
sb=新的StringBuffer(String.valueOf(数学楼层(in));
使某人倒转;
for(int i=0;i
对于传入“10”,第一次迭代的结果是=48,我不明白当我想要以下内容时,它哪里出了问题:

in=10

sb.reverse=“01”

//循环字符在sb的第一个位置的第一次迭代。反转为0 out+=双值(sb.chartAt(0))*数学功率(3,0)

//在sb的第二个位置循环字符的第二次迭代。反转为1 out+=双值(sb.chartAt(1))*数学功率(3,1)

返回; //如果你看的话,out应该是3 您将看到reverse返回一个新的StringBuffer

所以把你的代码改成

sb = sb.reverse();
同样,由于您使用的是整数而不是双精度数,那么为什么要将字符转换为双精度数呢

试一试

字符
'0'
被转换为
双精度
,但其值是48,而不是0


另外,您需要使用由
sb.reverse()
返回的值,而不是原始的
sb

这一点,然后我意识到使用floor()使sb=“0.001”因此计数为4(但不是带“.”的5)。谢谢
int x = Character.getNumericValue(sb.charAt(i));
out +=  x * Math.pow(3,i);
Double.valueOf(sb.charAt(i))