1

私が解決しようとしている問題は、段落を構成することであり、1私のプログラムthumbが私の歌の2行目に言うと言うときです。私のプログラムが言うとき、それは私の歌の2行目に2言うべきです。shoeプログラムが計画どおりに動作せず、ループ内で switch ステートメントを正しく使用しているforかどうか、またはプログラムのシーケンスが間違っているかどうかがわかりません。

import acm.program.*;

public class SingChildSong extends ConsoleProgram {
    public void run() {
        for (int i = 1; i < 3; i++){
            println ("This old man, he played" + i);

            switch (i) {
                case 1: println("thumb"); break;
                case 2: println("shoe"); break;
                case 3: println("knee"); break;
            }

            println ("He played knick-knack on my"  + (i));
            println ("With a knick-knack, paddy-whack");
            println ("Give your dog a bone.");
            println ("This old man came rolling home.");

            println ( "" );
        }
    }
}
4

7 に答える 7

3

これは switch ステートメントではなく、for ループです。ループは、i が「<=」以下の場合ではなく、3 未満の場合に終了します。

それをテストする怠惰な方法の 1 つは、i の値を簡単で汚いテストとして出力することです。派手にしたい場合は、ブレークポイントを追加して、ループ中に i の値を調べることができます。さらに良いことに、主なメソッドは弱虫向けであるため、JUnit テストを作成します。

@Test
public void tester(){
    // I <3 zero
    for( int i = 0; i < 3; i++ ) {
        String bodyPart = getBodyPart(i);
        // Dumb test example
        if( i == 0 ) {
           assertTrue( "thumb" ==  bodyPart );
        } else if ( i == 1 ) {
           assertTrue( "shoe" == bodyPart );
        } else if ( i == 2 ) {
           assertTrue( "knee" == bodyPart );
        }
    }
}

public String getBodyPart(int i) {
    switch(i){
        case 1: 
            return "thumb";
        case 2:
            return "shoe";
        case 3:
            return "knee";
        default:
            return null;
    }
}
于 2013-01-17T00:29:23.817 に答える
3

私がそれを正しければ、あなたは次のことをするつもりです:

...
for (int i = 1; i <= 3; i++){
    System.out.println ("This old man, he played " + i);
    String word;

    switch (i) {
    case 1: word = "thumb"; break;
    case 2: word = "shoe"; break;
    case 3: word = "knee"; break;
    }

    System.out.println ("He played knick-knack on my "  + word);
    System.out.println ("With a knick-knack, paddy-whack");
    System.out.println ("Give your dog a bone.");
    System.out.println ("This old man came rolling home.");

    System.out.println ( "" );
 }
...

あなたの本では文字列はまだ研究されていないとおっしゃっていますが、文字列を除いた正しい答えは次のようになります。

...
for (int i = 1; i <= 3; i++){
    System.out.println ("This old man, he played " + i);

    switch (i) {
    case 1:
        System.out.println ("He played knick-knack on my thumb");
        break;
    case 2:
        System.out.println ("He played knick-knack on my shoe");
        break;
    case 3: 
        System.out.println ("He played knick-knack on my knee");
        break;
    }

    System.out.println ("With a knick-knack, paddy-whack");
    System.out.println ("Give your dog a bone.");
    System.out.println ("This old man came rolling home.");

    System.out.println ( "" );
 }
...
于 2013-01-17T00:37:08.707 に答える
0

文字列をまだ学習していない場合は、文字列を表示する順序を考えてください。申し訳ありませんが、以前は間違いを犯していましたが、回答を適切に編集しました。

public void run() {
        for (int i = 1; i <= 3; i++){
            println ("This old man, he played " + i);

            println ("He played knick-knack on my");
            //print your word 
            switch (i) {
              case 1: println("thumb"); break;
              case 2: println("shoe"); break;
              case 3: println("knee"); break;
               }

            println ("With a knick-knack, paddy-whack");
            println ("Give your dog a bone.");
            println ("This old man came rolling home.");

            println ( "" );
         }
        }
于 2013-01-17T00:31:35.333 に答える
0

ループのカウンター変数であるため、文字列を i に割り当てることはありません。これは致命的です。switch ステートメントを使用する必要があると思いますので、実際の解決策を投稿してから、それが機能する理由を説明します。

for( int i=0; i<3; i++){
   println ("This old man, he played" + i);
    String instrument;

    switch (i) {
    case 0: instrument = "thumb"; break;
    case 1: instrument = "shoe"; break;
    case 2: instrument = "knee"; break;
    }



    println ("He played knick-knack on my "  + instrument);
    println ("With a knick-knack, paddy-whack");
    println ("Give your dog a bone.");
    println ("This old man came rolling home.");

    println ( "" );

 }

変数 i はループの単なるカウンターなので、i を出力すると数値が出力されます。そのため、switch ステートメントの前に文字列変数「instrument」を定義し、それを適切な値に割り当てます (ループは 0 からカウントを開始するため、ケースまたはループのいずれかを調整する必要があることを思い出してください。 (int i=1; i<4; i++))

于 2013-01-17T00:36:42.823 に答える
0
for (int i = 1; i < 3; i++)

for ループ ブロックは で停止しi = 3ます。これはi < 3false に等しいことを意味します。

于 2013-01-17T00:37:04.053 に答える
0

なぜrunメソッドにそれがあるのですか?? Run は、マルチスレッドに使用されるThreadおよびRunnableオブジェクトの特別なメソッドです。

プログラムを実行するには、別のメソッドに移動してみてください。メインに移動してみてください。

また、単語ではなく i を印刷しています。試す :

public class Song{
    public static void main(String[] args){

    String[] arr = {"thumb","shoe","knee"};

    for (int i = 0 ; i < 3 ; i++){
        System.out.println("this old man he played "+arr[i]);
    }
}
}

そうすれば、switch ステートメントは必要ありません。

于 2013-01-17T00:39:48.417 に答える
0

次のいずれかを行う必要があります。

  1. ORSystem.out.printlnの代わりに使用println
  2. 使用してimport static java.lang.System.out.println;ください。

あなたが本を読み始めたばかりであることを考えると、おそらくimport staticまだ完全ではありません。これはかなり高度な構造です。したがって、解決策1を使用してください。

System.out.println("He played knick-knack on my" + (i));

編集:また、他の人も良い点を指摘しています-メソッドpublic static void main(String args[])ではなく使用しrun()ます。Java プログラムを実行するとmain()、 ではなくが呼び出されますrun()

于 2013-01-17T00:40:19.137 に答える