/*OridinalForm.java
* ----------------
* This program displays the the number with their suffix.
*/
import acm.program.*;
public class OridinalForm extends ConsoleProgram {
private static final long serialVersionUID = 1L;
public void run(){
while(true){
int no=readInt("Please enter the numberand press 0 to stop:");
if(no==0){
break;
}
println(oridinalForm(no));
}
}
private String oridinalForm(int nos){
String result="";
switch(nos){
case '1':result=nos+"1st";
case '2':result=nos+"2nd";
case '3':result=nos+"3rd";
default:
1 if(nos.charAt(nos.length()-1)=1){
result=nos+"1st";
}
2 if(nos.charAt(nos.length()-1)=2){
result=nos+"2nd";
}
3 if(nos.charAt(nos.length()-1)=3){
result=nos+"3rd";
}
else result=nos+"th";
}
return result;
}
}
代码是用不同条件解释no的结果。错误在线:1,2,3。请解释一下调试方法。我对这种方法一无所知。
答案 0 :(得分:4)
此处nos
是int
。但是在switch
语句中,您将其与chars
进行比较:'1'
可以隐式转换为int
进行比较,但这是{{1}的ASCII值},或0x31
。使用49
声明中的实际数字。
您无法在原始switch
类型上调用方法。要获取特定数字,您可以将其转换为int
String
,然后调用String.valueOf
。
接下来,在这一行(和其他人一样),
charAt
if(nos.charAt(nos.length()-1)=1){
运算符是java中的赋值运算符。请使用=
来比较==
值。这是关于Java operators的教程。
答案 1 :(得分:2)
private String oridinalForm(int nos){
// ^^^
if(nos.charAt(nos.length()-1)=1){
// ^ ^ ^
result=nos+"1st";
}
if(nos.charAt(nos.length()-1)=2){
result=nos+"2nd";
}
if(nos.charAt(nos.length()-1)=3){
result=nos+"3rd";
}
else result=nos+"th";
}
return result;
}
nos
是int
。它没有charAt
或length
方法。事实上,由于它是一个原始的,它不能有任何方法。
此外,正如其他答案中所述,=
用于分配,==
用于比较(这是您想要的)。
答案 2 :(得分:0)
nos
是一个int,它是一个原语,并且不会附加任何方法。我认为您的if
语句应为if(result.charAt(result.length()-1) == 1)
,依此类推。
答案 3 :(得分:0)
如果查看每个if语句,您将看到实际上正在为字符串末尾的字符赋值。应该是if(nos.charAt(nos.length()-1)=1){
if(nos.charAt(nos.length()-1)==1){