运行时错误.整数转换为字符串

Ale*_*207 3 java string int type-conversion

我目前正在创建一个程序,它返回数字的序数形式(第1个,第2个等).但是当我运行我的程序时,我得到一个运行时错误.

我怀疑它与我从int转换为字符串有关,但我似乎无法找到问题的根源.

public void run() {
        ordinalform(5);
    }

    private String ordinalform(int num) {
        String number = Integer.toString(num);
        String correctWord ="";
        if((number.charAt(number.length()-2)=='1'
                && number.charAt(number.length()-1)=='1')){
            correctWord=number+"th";
        } else if (number.charAt(number.length()-2)=='1'
                && number.charAt(number.length()-1)=='2') {
            correctWord=number+"th";
        } else if ((number.charAt(number.length()-1)=='1'
                && number.charAt(number.length()-1)=='3')) {
            correctWord=number+"th";
        } else if(number.charAt(number.length()-1)=='1') {
            correctWord=number+"st";
        } else if(number.charAt(number.length()-1)=='2') {
            correctWord=number+"nd";
        } else if(number.charAt(number.length()-1)=='3') {
            correctWord=number+"rd";
        } else {
            correctWord=number+"th";
        }
        println(correctWord);
        return correctWord;
    }
}
Run Code Online (Sandbox Code Playgroud)

错误: Exception in thread "Thread-1" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.charAt(String.java:646) at StringTraining.ordinalform(StringTraining.java:17) at StringTraining.run(StringTraining.java:11) at acm.program.Program.runHook(Program.java:1568) at acm.program.Program.startRun(Program.java:1557) at acm.program.AppletStarter.run(Program.java:1895) at java.lang.Thread.run(Thread.java:745)

Moh*_*uag 7

编辑:

您使用数字5作为参数调用您的方法:

ordinalform(5);
Run Code Online (Sandbox Code Playgroud)

ordinalform函数中执行的第一条指令:

String number = Integer.toString(num);
Run Code Online (Sandbox Code Playgroud)

这会将变量num(等于5)转换为String.现在number等于"5".请注意,number.length()现在等于1.

接下来你的情况:

if((number.charAt(number.length()-2)=='1' && ....) { }
Run Code Online (Sandbox Code Playgroud)

number.length()等于1(数字=="5").因此,number.length() - 2将等于-1.所以从技术上讲,你要做的是:

if((number.charAt( -1 )=='1' && ....) { }
Run Code Online (Sandbox Code Playgroud)

并且由于没有索引-1这样的东西,StringIndexOutOfBoundsException抛出了a ,执行失败.