我目前正在创建一个程序,该程序返回数字的序数形式(第一,第二等)。但是,当我运行程序时,会出现运行时错误。
我怀疑这与我从int到string的转换有关,但是我似乎找不到问题的根源。
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;
}
}
错误: 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)
编辑:
您正在使用数字5作为参数调用您的方法:
ordinalform(5);
在ordinalform
函数中执行的第一条指令:
String number = Integer.toString(num);
这会将变量num
(等于5)转换为字符串。现在number
等于“ 5”。注意,number.length()
现在等于1。
接下来的条件:
if((number.charAt(number.length()-2)=='1' && ....) { }
number.length()
等于1(数字==“ 5”)。因此,number.length() - 2
将等于-1。因此,从技术上讲,您想要做的是:
if((number.charAt( -1 )=='1' && ....) { }
而且由于没有索引-1之类的东西,StringIndexOutOfBoundsException
因此抛出a,执行失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句