StringBuffer循环设置

时间:2014-04-30 00:48:41

标签: 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 < 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

2 个答案:

答案 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