我目前正在创建一个程序,它返回数字的序数形式(第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;
}
}
错误: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)
答案 0 :(得分:7)
修改强>
您正在使用数字5作为参数调用您的方法:
ordinalform(5);
在ordinalform
函数中执行的第一条指令:
String number = Integer.toString(num);
这会将变量num
(等于5)转换为String。现在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
,执行失败。
答案 1 :(得分:1)
我找到了解决方案。我需要的是在前三个循环中的额外条件。
public class StringTraining extends ConsoleProgram {
public void run() {
ordinalform(5);
}
private String ordinalform(int num) {
String number = Integer.toString(num);
String correctWord ="";
if(number.length()>1 && number.charAt(number.length()-2)=='1'
&& number.charAt(number.length()-1)=='1'){
correctWord=number+"th";
}else if(number.length()>1 && number.charAt(number.length()-2)=='1'
&& number.charAt(number.length()-1)=='2') {
correctWord=number+"th";
} else if (number.length()>1 && number.charAt(number.length()-2)=='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;
}
}