首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuffer循环设置

StringBuffer循环设置
EN

Stack Overflow用户
提问于 2014-04-30 00:48:41
回答 2查看 8.6K关注 0票数 1

我希望循环遍历一个StringBuffer,并使用每个字符的值来计算输出。调试显示,当我传入10时,sb.length()是4,尽管它应该是2。我应该使用不同的方法吗?

代码语言:javascript
复制
    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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-30 00:53:24

如果您查看http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#reverse(),您将看到反向返回一个新的StringBuffer

因此,将代码更改为

代码语言:javascript
复制
sb = sb.reverse();

另外,当你使用的是Intergers而不是双倍时,你为什么要将字符投到双倍呢?

试一试

代码语言:javascript
复制
int x = Character.getNumericValue(sb.charAt(i));
out +=  x * Math.pow(3,i);
票数 2
EN

Stack Overflow用户

发布于 2014-04-30 00:55:45

在…

代码语言:javascript
复制
Double.valueOf(sb.charAt(i))

字符'0'被转换为double,但是它的值是48,而不是0。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23377814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档