所以我需要编写一个方法,它允许我找到下一个数字而不使用除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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:基于评论:).纠正你的逻辑true和false.
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '9' ) {
nine = true;
}
else
{
nine = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
你也得到了一个out of bounds exception因为
while (sb.charAt(sb.length()- a) == '9'){
sb.setCharAt(sb.length()- a, '0' );
a++;
}
Run Code Online (Sandbox Code Playgroud)
sb.length()- a当控制来检查条件时,第五次迭代后将为负.
你在其他情况下没有得到相同的错误,因为控件永远不会进入while循环(as 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;
}
Run Code Online (Sandbox Code Playgroud)
你在干嘛
if (sb.charAt(i) != 9 ) {
nine = true;
} else nine = false;
Run Code Online (Sandbox Code Playgroud)
相反,如果你想与角色9进行比较,
if (sb.charAt(i) != '9' ) {
nine = true;
} else nine = false;
Run Code Online (Sandbox Code Playgroud)
否则你只是在比较的ASCII值charAt(i),因此你boolean将只false,如果charAt(i)有ASCII值9