2009-10-18 178 views
6

我有一个是或否的问题&答案。如果答案是肯定的,我想问另一个是或否的问题。我的导师希望我们使用charAt(0)作为答案的输入。Java问题:是否有可能在另一个switch语句中有switch语句?

是否有可能在另一个switch语句(如嵌套的if语句)?

在此先感谢。

编辑:这是我的伪代码样本=

display "Would you like to add a link (y = yes or n = no)? " 
input addLink 

switch (link) 
    case 'y': 
     display "Would you like to pay 3 months in advance " + "(y = yes or n = no)?" 
     input advancePay 

       switch(advPay) 
         case 'y': 
       linkCost = 0.10 * (3 * 14.95) 

       case 'n' 
       linkCost = 14.95    
    case 'n' 
     linkCost = 0.00 
+16

...只是说... – 2009-10-18 01:44:51

+0

我认为SO的意义在于人们不需要编写代码来测试一个想法。 – 2009-10-18 01:48:13

+2

@ande_turner:no。 SO在这里回答问题,而不是做人而不是做事。 – 2010-02-05 06:56:51

回答

14

是的,但是没有。如果您需要更进一步的逻辑级别,请将第二台交换机置于其自己的方法中,并使用描述性名称。

编辑:通过你添加的例子,你有两个布尔条件。我建议不要使用开关,而应使用if & else条件。使用(STRING.charAt(0) == 'y')作为你的测试用例,或者像boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1为“是,但不要”的简洁。 – CPerkins 2009-10-18 15:10:31

1

这样的方法是可能的,但这将是非常复杂和难以阅读。几乎可以肯定有更好的方法,比如在第一个switch语句中调用方法,并在该方法中进行更多必要的处理(如果需要,还包括其他开关)。

0

大多数编程语言都是正交的。这意味着,如果有意义的话,使用特征通常不取决于位置。

例如,您不能将局部变量声明为public。

+1

@Srini:我不明白这是如何回答这个问题的。具体来说,它没有提到Java中的“switch”是否正交。正交性是程序设计语言设计者争取的特性,但很少完全实现。如果不理解语言规范,您无法推断出任何特定的语言构造都是正交的。这可能是一个例外。 – 2009-10-18 02:18:37

2

是的。开关会中断语言块语句模式,但这主要是因为Java使用的switch语句所基于的C/C++。

在所有三种语言,switch语句采用以下形式:

switch(variable) { 
    case n: 
     statement 1; 
     statement n; 
     (optional) break; 
    case n+1: 
     statement 1; 
     statement n; 
     (optional) break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 

由于switch语句中打破了传统的语言模式,很多程序员使用传统的块式的包装它们的多条语句的情况下:{ }

这是因为所有三种语言的大多数结构都允许将块样式语句视为一个语句,但switch语句不需要块样式在单个个案中执行多个语句。

如果没有break语句分隔每个case,将会出现“fall through” - 如果case n匹配并且没有中断,那么将执行它下面的代码(case n + 1) - 如果case n + 1没有休息并被匹配,默认代码将执行,如果两者都没有中断,则在匹配情况n时,将执行情况n,情况n + 1和默认的代码。

默认值是可选的,并指定要执行的switch语句的默认操作。通常情况下,默认条件是通用处理程序,或者如果值在逻辑上不是逻辑上不是switch语句中的值以外的其他位置,则会引发异常。

为了说明在switch语句中执行switch语句,来看看这个人为的例子:

String message = null; 
int outerVariable = getOuterVariable(); 
switch(outerVariable) { 
    case n: 
     statement 1; 
     statement n; 
     break; 
    case n+1: 
     int innerVariable = getInnerVariable(); 
     switch(innerVariable) { 
      case 1: 
       message = "IT WAS 1"; 
       break; 
      default: 
       message = "WHY WOULD YOU DO THIS? OH THE HUMANITY!"; 
     } 
     break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 
在花了你写的这个问题,你可以自己已经测试了它的时间
+0

只是要小心上面的代码 - 如果你正在翻译成java,请注意,case语句必须是常量表达式 – Chii 2009-10-18 02:41:17

+0

Chii - 好点。此外,Java 5的枚举也可以在switch语句中使用。 – MetroidFan2002 2009-10-18 05:16:53