该程序出错。错误在线:1,2,3。

时间:2013-06-27 18:55:43

标签: java

/*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。请解释一下调试方法。我对这种方法一无所知。

4 个答案:

答案 0 :(得分:4)

此处nosint。但是在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;
 }

nosint。它没有charAtlength方法。事实上,由于它是一个原始的,它不能有任何方法。

此外,正如其他答案中所述,=用于分配,==用于比较(这是您想要的)。

答案 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){