0
/*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

4 に答える 4

4

ここでnosは、intです。しかし、あなたのswitchステートメントでは、それを と比較していますchars:は比較のために暗黙的に'1'に変換できますが、それは, またはの ASCII 値です。ステートメントには実際の数値を使用してください。int0x3149switch

intプリミティブ型でメソッドを呼び出すことはできません。特定の数字を取得するには、それStringをwithに変換してから呼び出すことができます。String.valueOfcharAt

次に、この行 (およびその他の行) で、

if(nos.charAt(nos.length()-1)=1){

=演算子は、Java の代入演算子です。==代わりに値を比較するために使用しintます。これは、 Java オペレーターに関するチュートリアルです。

于 2013-06-27T18:59:51.607 に答える
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ですintcharAtorlengthメソッドはありません。実はプリミティブなのでメソッドを持つことはできません。

また、他の回答で述べたように、 =割り当て用で==あり、比較用です(これが必要です)。

于 2013-06-27T19:01:44.267 に答える
0

nosプリミティブである int であり、それにアタッチされたメソッドはありません。あなたのif発言は、などであるべきだと思いますif(result.charAt(result.length()-1) == 1)

于 2013-06-27T19:00:06.407 に答える
0

それぞれの if ステートメントを見ると、文字列の末尾にある文字に実際に値を代入していることがわかります。if(nos.charAt(nos.length()-1)=1){おそらくあるはずです if(nos.charAt(nos.length()-1)==1){

于 2013-06-27T19:00:14.623 に答える