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