我希望循环遍历一个StringBuffer,并使用每个字符的值来计算输出。调试显示,当我传入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“,第一次迭代会产生out=48,我不知道它在哪里出错,如果我想要这样做的话:
in = 10
sb.reverse = "01“
// sb.reverse第一位置环炭的第一次迭代为0,+= Double.valueOf(sb.chartAt(0)) * Math.pow(3,0);
// sb.reverse第二位环炭的第二次迭代为1 out += Double.valueOf(sb.chartAt(1)) * Math.pow(3,1);
返回;//退出应为3
发布于 2014-04-30 00:53:24
如果您查看http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#reverse(),您将看到反向返回一个新的StringBuffer
因此,将代码更改为
sb = sb.reverse();另外,当你使用的是Intergers而不是双倍时,你为什么要将字符投到双倍呢?
试一试
int x = Character.getNumericValue(sb.charAt(i));
out += x * Math.pow(3,i);发布于 2014-04-30 00:55:45
在…
Double.valueOf(sb.charAt(i))字符'0'被转换为double,但是它的值是48,而不是0。
另外,您需要使用sb.reverse()返回的值,而不是原始的sb。
https://stackoverflow.com/questions/23377814
复制相似问题