首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >charAt(我--),得到价值在( i -1)还是我?

charAt(我--),得到价值在( i -1)还是我?
EN

Stack Overflow用户
提问于 2016-03-08 20:33:55
回答 2查看 318关注 0票数 0

当我运行以下代码时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int i = s1.length()-1, j = s2.length()-1;
int t1, t2, c=0;
while(i>=0||j>=0) {
    t1=Character.getNumericValue(i<s1.length() ? s1.charAt(i--) : '0');
    t2=Character.getNumericValue(j<s2.length() ? s2.charAt(j--) : '0');
    c = (t1 + t2) > 1 ? 1 : 0;
    res.append(t1^t2 + c);
}

我知道这个错误:

java.lang.StringIndexOutOfBoundsException:超出范围的字符串索引:-1

是什么导致了错误,我如何修复它?

EN

回答 2

Stack Overflow用户

发布于 2016-03-08 20:37:44

问题是循环的终止条件。它与后递减运算符的行为无关。如果ij为负值,则需要退出。现在,只有当两者都为负数时,它才会退出。尝试使用&&而不是||

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while (i >= 0 && j >= 0) {
    ...
}

P.S.:循环中对i<s1.length()j<s2.length()的测试是无用的。ij开始时都比各自的字符串长度小,并且只会下降,因此条件总是true

票数 2
EN

Stack Overflow用户

发布于 2016-03-08 20:37:58

如果您的ij保证是相等的(即s1.length() = s2.length(),那么您的程序虽然编写得不好,但至少是可以的。

但是,问题是您的ij可能不是相同的数字。如果,比方说,j > i,那么i将在j之前到达0,但循环将继续。将while条件从以下位置更改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(i>=0||j>=0)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(i>=0&&j>=0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35882950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文