我想遍历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);
}
对于传入“10”,第一次迭代得出= 48,当我想要以下内容时,我不明白它出了什么问题:
in = 10
sb.reverse =“01”
//循环的第一次迭代 - 在sb.reverse的第一个位置的char为0 out + = Double.valueOf(sb.chartAt(0))* Math.pow(3,0);
//循环的第二次迭代 - sb.reverse的第二个位置的char为1 out + = Double.valueOf(sb.chartAt(1))* Math.pow(3,1);
退出; // out应为3
答案 0 :(得分:2)
如果你看http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#reverse() 你会看到反向返回一个新的StringBuffer
所以将代码更改为
sb = sb.reverse();
另外,当你使用Intergers而不是双打时,为什么要将char转换为double?
尝试
int x = Character.getNumericValue(sb.charAt(i));
out += x * Math.pow(3,i);
答案 1 :(得分:0)
目前
Double.valueOf(sb.charAt(i))
字符'0'
会转换为double
,但其值为48,而不是0.
此外,您需要使用sb.reverse()
返回的值,而不是原始的sb
。