1

我要解决的问题是编写一段,当我说1我的程序thumb在歌曲的第二行说。当我的程序说它2应该shoe在我的歌曲的第二行说。我的程序没有按计划运行,我不确定我是否在for循环内正确使用了 switch 语句,或者我的程序顺序是否错误。

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 时终止,而不是在它小于或等于 '<=' 时终止

一种懒惰的测试方法是打印 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 < 3等于假。

于 2013-01-17T00:37:04.053 回答
0

为什么你在运行方法中有这个?Run 是ThreadRunnable对象中的一种特殊方法,用于多线程。

为了使您的程序运行,您应该尝试将其移至另一种方法。尝试将其移至主要位置。

此外,您正在打印 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. 使用System.out.println代替println OR
  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 回答