gpt4 book ai didi

java - 找不到我的越界异常的原因

转载 作者:行者123 更新时间:2023-12-01 07:28:04 25 4
gpt4 key购买 nike

所以我需要编写一个方法,它允许我找到下一个数字,而无需使用除 String 和 StringBuffer 类之外的任何内容(因此无需解析或任何其他内容)。

当我运行代码时,除了最后一个输入(字符串 k)之外,一切似乎都工作正常。它会导致 while 循环出现越界错误。但我不明白它是如何做到这一点的,因为既然我的 boolean 值应该是假的(我认为因为它只由九组成),所以它不应该首先进入循环。

public class Palindroom {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="347"
+ ""; System.out.println("s "+increment(s));
String p="199919";System.out.println(" p "+increment(p));
String d="199999";System.out.println( " d "+increment(d));
String k ="999999";System.out.println(" k "+increment(k));

}

static String increment (String s) {
StringBuffer sb = new StringBuffer (s);
char laatst = sb.charAt(sb.length()-1);
int laatste = sb.length()-1;

if(laatst == '9') {
int a = 1;
boolean nine = false;
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) != 9 ) {
nine = true;

} else nine = false;
}
if (nine == true) {
while (sb.charAt(sb.length()- a) == '9'){

sb.setCharAt(sb.length()- a, '0' );

a++;
}
sb.setCharAt(sb.length()-a, ((char)((sb.charAt(sb.length()-a)+1))));

} else if( nine == false) {
System.out.println("negen "+nine);
sb.insert(0, '1');
for (int i = 0; i < sb.length(); i++) {
if(sb.charAt(i)=='9') {
sb.setCharAt(i, '0');
}
}
}

} else {
sb.setCharAt(laatste,(char) (laatst+1) );
}

return sb.toString();
}
}

最佳答案

编辑:基于评论:)。更正您的 truefalse 逻辑。

 for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '9' ) {
nine = true;

}
else
{
nine = false;
break;
}

}

您还收到越界异常,因为

while (sb.charAt(sb.length()- a) == '9'){

sb.setCharAt(sb.length()- a, '0' );

a++;
}

第五次迭代后,当控件检查条件时,sb.length()- a 将为负数。

在其他情况下您不会收到相同的错误,因为控件永远不会进入 while 循环(如 nine == false)

旧观察

if(laatst == '9') {
int a = 1;
boolean nine = false;
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) != 9 ) {
nine = true;

} else nine = false;
}

你正在做

if (sb.charAt(i) != 9 ) {
nine = true;

} else nine = false;

相反,如果您想与字符 9 进行比较,

if (sb.charAt(i) != '9' ) {
nine = true;

} else nine = false;

否则您只是比较 charAt(i) 的 ASCII 值,因此您的 boolean 只会是 false,如果 charAt(i) 的 ascii 值是 9

关于java - 找不到我的越界异常的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com