正确使用switch语句

时间:2013-01-17 00:25:53

标签: java switch-statement

我正在尝试解决的问题是撰写一个段落,当我说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 ( "" );
        }
    }
}

7 个答案:

答案 0 :(得分:3)

这不是switch语句,而是for循环。当i小于3时,循环终止,而当它小于或等于'&lt; ='时,循环终止

测试它的一种懒惰方法是将i的值打印为快速而肮脏的测试。如果你想要花哨,你可以添加一个断点并在循环中检查i的值。更好的是,进行JUnit测试,因为主要方法适用于sissies。

@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;
    }
}

答案 1 :(得分: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 ( "" );
 }
...

答案 2 :(得分: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 ( "" );
         }
        }

答案 3 :(得分: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语句之前定义了一个String变量“instrument”,然后将它分配给适当的值(记住,循环从0开始计数,所以你必须调整你的情况或你的循环,你也可以为(int i = 1; i <4; i ++))

答案 4 :(得分:0)

for (int i = 1; i < 3; i++)

您的for循环块将停在i = 3。这意味着i < 3等于false。

答案 5 :(得分:0)

为什么在run方法中有这个? 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语句了。

答案 6 :(得分:0)

您需要:

  1. 使用System.out.println代替println
  2. 使用import static java.lang.System.out.println;
  3. 鉴于你在书的早期,你可能还不够import static - 它是一个相当先进的结构。因此,请使用解决方案 1

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

    编辑:此外,其他一些人提出了一个很好的观点 - 使用public static void main(String args[]),而不是run()方法。运行Java程序时,它会调用main(),而不是run()