2015-04-12 78 views
0

我期待我的输入是三个字符组之一,并且需要根据它属于哪个组来决定如何处理它。我试图弄清楚如何定义一个切换多个案例来做到这一点。这是我到目前为止:在java开关中的多个参数

 while(in.hasNextChar()) 
     { 
     char test = in.nextChar(); 
     List<Signal> out = new List<Signal>(0); 
     switch(test) 
     { 
      case '1','0','x','X': 
       out.add(fromString(test)); 
       break; 
      case ' ','/t': 
       break; 
      default: 
       throw new ExceptionLogicMalformedSignal; 
     } 
     } 
     return out; 
    } 

回答

3

你有句法错误。你需要充分利用落空的:

 switch(test) { 
     case '1': 
     case '0': 
     case 'x': 
     case 'X': 
      out.add(fromString(test)); 
      break; 
     case ' ': 
     case '\t': 
      break; 
     default: 
      throw new ExceptionLogicMalformedSignal; 
    } 

的情况只是一个标签,非常相似,你会用goto使用什么(这基本上是什么幕后发生的事情)。这不是一个声明,因为它本身没有做任何事情—它只是一个地址。因此,如果test'0',它可以愉快地继续通过'x''X'个案来达到实际的语句代码,因为这些标签没有任何内容。只有break“结束”了一个案例。

实际上,你可以插入情况之间的代码即使没有break

switch(test) { 
    case '1': 
     System.out.println("This is printed by case '1'"); 
    case '0': 
     System.out.println("This is printed by both case '1' and case '0'"); 
     break; 
    case 'x': 
    case 'X': 
     System.out.println("This is only printed by the Xs"); 
     break; 
    default: 
     break; 
} 
+0

我不完全知道为什么,应该工作,但我还挺看看它是如何做。谢谢你的帮助。 –

+0

@C.J.Coffey你的代码只是第一个有休息的案例。 – Hristo