Java问题:是否可以在另一个语句中使用switch语句?

时间:2009-10-18 01:41:36

标签: java switch-statement

我有一个是或否的问题&回答。如果答案是肯定的,我想问另一个是或否的问题。我的导师希望我们使用charAt(0)作为答案的输入。

是否可以在另一个语句中使用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

4 个答案:

答案 0 :(得分:18)

是的,但不要。如果您需要更高级别的逻辑,请将第二个Switch放在其自己的方法中,并带有描述性名称。

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

的方法

答案 1 :(得分: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)将被执行 - 如果是n + 1没有中断并且匹配,默认代码将执行,如果两者都没有中断,则在匹配大小写n时,大小写n,case n + 1和default将执行。

默认值是可选的,它指定要执行的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;
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

大多数编程语言都是正交的。这意味着,如果有意义,使用功能通常不依赖于位置。

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