2012-11-14 183 views
0

我有一个关于weather的问题,它在for循环中使用switch语句是合法的。它写在Eclipse下面的方式给了我一个错误,不会让我在for循环的第二条语句中使用switch(n)。我想要做的是写...
在for循环中使用switch语句

这位老人,他打了1
他在我的拇指上打了个小诀窍。

用for循环和switch语句解决以下问题有更好的方法吗?我想写出不同的数字和不同的情况下的段落10。所以1个拇指,2鞋,3膝盖....直到代替switch语句10.

import acm.program.*; 

public class SingSong extends ConsoleProgram { 

    public void run() { 
     for (int n = 1; n <= 10; n++) { 
      println("This old man, he played " + n); 
      println("He played knick-knack on my" + switch(n)); 
      println("With a knick-knack, paddy-whack,"); 
      println("Give your dog a bone"); 
      println("This old man came rolling home"); 

      switch (n) {    
       case 1 : println("thumb"); break; 
       case 2 : println("shoe"); break; 
       case 3 : println("knee"); break; 
       case 4 : println("door"); break; 
       case 5 : println("hive"); break; 
       case 6 : println("sticks"); break; 
       case 7 : println("heaven"); break; 
       case 8 : println ("pate"); break; 
       case 9 : println("spine"); break; 
       case 10 : println("shin"); break; 
      } 
     } 
    } 
} 
+3

'Eclipse给我一个错误。'哪个错误详细? – 2012-11-14 11:45:03

+0

错误是...令牌“+”的语法错误,++预计 –

+0

谢谢大家。我正在阅读所有建议并立即尝试。 –

回答

4

你想要的是一个方法,你会打电话:

private String which(int n) { 
    switch (n) { 
    case 1 : return "thumb"; 
    case 2 : return "show"; 
    case 3 : return "knee"; 
    case 4 : return "door"; 
    case 5 : return "hive"; 
    case 6 : return "sticks"; 
    case 7 : return "heaven"; 
    case 8 : return "pate"; 
    case 9 : return "spine"; 
    case 10 : return "shin"; 
    default: return ""; 

    } 
} 

然后用

println("He played knick-knack on my" + which(n)); 

另一个替换

println("He played knick-knack on my" + switch(n)); 

,更succint的方法是创建一个字符串数组:

static final String[] which = { 
    "thumb","show","knee","door","hive", "sticks","heaven","pate","spine","shin"}; 

,然后只用

println("He played knick-knack on my" + which[n]); 
+0

谢谢。创建方法实际上是下一章。 –

0

使用if-else

if(n==1){ 
... 
}else if(n==2){ 
... 
} 
+3

你可以添加一个理由吗? –

+0

你能举个例子1和鞋吗? –

+0

谢谢。真的有帮助 –

3
println("He played knick-knack on my" + switch(n)); 

这难道不使你的交换机的呼叫。开关不是一种方法。 为了得到所需的输出,

println("This old man, he played " + n); 
      println("He played knick-knack on my"); 

    switch (n){ 

      case 1 : print("thumb"); break; 
      case 2 : println("shoe"); break; 
      case 3 : println("knee"); break; 
      case 4 : println("door"); break; 
      case 5 : println("hive"); break; 
      case 6 : println("sticks"); break; 
      case 7 : println("heaven"); break; 
      case 8 : println ("pate"); break; 
      case 9 : println("spine"); break; 
      case 10 : println("shin"); break; 

      } 

甚至更​​好地遵循@Marko Topolnik办法,我会说是最好的办法。

-1

for循环中的switch/case语句没问题,问题在于switch不是函数调用。尝试是这样的:

string obj; 
    switch (n){ 

    case 1 : obj="thumb"; break; 
    case 2 : obj="show"; break; 
    //Etc 
    } 


    } 
    println("This old man, he played " + n); 
    println("He played knick-knack on my" + obj); 
    println("With a knick-knack, paddy-whack,"); 
    println("Give your dog a bone"); 
    println("This old man came roiling home"); 
4

创建Map<Integer, String>方含整串映射和使用Map.get()获得字符串:

Map<Integer, String> m = new HashMap<Integer, String>(); 
m.put(1, "thumb"); 
// etc 
m.put(10, "shin"); 

println("He played knick-knack on my" + m.get(n)); 
+0

谢谢,但我还没有学习地图。所以我必须坚持到目前为止我学到的材料,这些材料是循环,开关语句和else/else if。 –

0

你不能做到这一点:

println("He played knick-knack on my" + switch(n)); 

如果你想让你的代码在很大程度上相同,你应该委托给一个执行切换的方法。

替代解决方案将包括一系列if/else if(有点冗长),或者可能是充当查找表的数组。

例如

// note arrays are indexed from 0 
String[] arrayOfObjects = new String[]{"thumb", ....}; 
println("He played knick-knack on my" + arrayOfObjects(n-1)); 

我想也许Map是矫枉过正在这种情况下,除非你有不连续的分度(不太可能)

+0

我觉得这个问题简单得多。它应该通过使用if/else if方法来解决。 –

1

开关(N)不是一个函数,不能这样使用。对编译器来说,这就像启动一个switch语句,但是完全错误,因此它返回一个错误。我认为要正确地做到这一点,你应该把案例切换到另一种方法,或者直接放在第二行之后。像这样:

import acm.program.*; 

public class SingSong extends ConsoleProgram { 

public void run(){ 
for (int n = 1; n <= 10; n++){ 

    println("This old man, he played " + n); 
    print("He played knick-knack on my "); 
    switch (n){ 
    case 1 : print("thumb"); break; 
    case 2 : print("show"); break; 
    case 3 : print("knee"); break; 
    case 4 : print("door"); break; 
    case 5 : print("hive"); break; 
    case 6 : print("sticks"); break; 
    case 7 : print("heaven"); break; 
    case 8 : print("pate"); break; 
    case 9 : print("spine"); break; 
    case 10 : print("shin"); break; 
    } 
    println("With a knick-knack, paddy-whack,"); 
    println("Give your dog a bone"); 
    println("This old man came roiling home"); 

     } 
     } 

     } 

这应该有效。或者用不同的方法:

import acm.program.*; 


public class SingSong extends ConsoleProgram { 
public void run(){ 

for (int n = 1; n <= 10; n++){ 

    println("This old man, he played " + n); 
    print("He played knick-knack on my"); 
    switcher(n); 
    print("\n"); 
    println("With a knick-knack, paddy-whack,"); 
    println("Give your dog a bone"); 
    println("This old man came roiling home"); 
} 
} 

    private void switcher(int n){ 
    switch(n){ 
    case 1 : print("thumb"); break; 
    case 2 : print("show"); break; 
    case 3 : print("knee"); break; 
    case 4 : print("door"); break; 
    case 5 : print("hive"); break; 
    case 6 : print("sticks"); break; 
    case 7 : print("heaven"); break; 
    case 8 : print ("pate"); break; 
    case 9 : print("spine"); break; 
    case 10 : print("shin"); break; 


     } 
     } 

     } 
+0

感谢您的提示。 –

0

您正在使用switch之类的方法。做下列变化,它会工作:

import acm.program.*; 

public class SingSong extends ConsoleProgram 
{ 
    public void run() 
    { 
     for (int n = 1; n <= 10; n++) 
     { 
      println("This old man, he played " + n); 
      println("He played knick-knack on my" + getValue(n)); 
      println("With a knick-knack, paddy-whack,"); 
      println("Give your dog a bone"); 
      println("This old man came roiling home"); 
     } 
    } 

    private String getValue(int n) 
    { 
     switch (n) 
     { 
      case 1 : return "thumb"; break; 
      case 2 : return "shoe"; break; 
      case 3 : return "knee"; break; 
      case 4 : return "door"; break; 
      case 5 : return "hive"; break; 
      case 6 : return "sticks"; break; 
      case 7 : return "heaven"; break; 
      case 8 : return "pate"; break; 
      case 9 : return "spine"; break; 
      case 10 : return "shin"; break; 

      default : return "VALUE NOT FOUND!!"; 
     } 
    } 
} 
+0

谢谢。我还没有学会创建自己的方法。本书希望我们使用if/else如果方法来解决问题。这比使用for/switch方法的方法要简单得多。 –