找不到我出界的异常原因

Kri*_*isH 0 java stringbuffer

所以我需要编写一个方法,它允许我找到下一个数字而不使用除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)

gau*_*430 6

编辑:基于评论:).纠正你的逻辑truefalse.

 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