所以我需要编写一个方法,允许我在不使用String和StringBuffer类的情况下查找下一个数字(因此不需要解析或任何解析)。
当我运行我的代码时,除了最后一个输入(String k)之外,一切似乎都能正常工作。它会导致while循环中的outofbounds错误。但我不明白它是如何做到的,因为我的布尔值应该是假的(我认为因为它只包含九个)它不应该首先进入te循环。
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();
}
}
答案 0 :(得分:6)
编辑:基于评论:)。更正true
和false
的逻辑。
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '9' ) {
nine = true;
}
else
{
nine = false;
break;
}
}
你也得到out of bounds exception
,因为
while (sb.charAt(sb.length()- a) == '9'){
sb.setCharAt(sb.length()- a, '0' );
a++;
}
在第五次迭代后,当控件检查条件时,sb.length()- a
将为负。
在其他情况下你没有得到相同的错误,因为控件永远不会进入while
循环(如nine == false
)
旧观察
in
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
答案 1 :(得分:1)
问题是,当您的字符串仅包含9个字符时,您的while
循环会导致a
超过sb.length()
。然后,您最终尝试访问sb
的第-1位的字符。