具有不同表达类型的嵌套开关

时间:2013-07-12 18:16:01

标签: java switch-statement

我正在尝试使用嵌套的switch语句。是否可以在嵌套的switch语句中使用不同的表达式类型?

我收到以下编译器错误:arith cannot be resolved as variable

有评论指出错误发生的位置。

以下是我的代码供您参考:

import java.util.Arrays;
import java.util.Scanner;


class Choice1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
                @SuppressWarnings("resource")

                Scanner S = new Scanner(System.in);

                int Source = 0, Target = 0,codePos = 0;

                System.out.println("Enter the Source(1-2) :");
                Source = S.nextInt();

                System.out.println("Enter the Target Value (1 - 3) :");
                Target = S.nextInt();


                if (Source == 1)
                {
                    String[] arith = {"Add","Sub"};
                    codePos = Arrays.binarySearch(arith, 0, arith.length, Target);
                }
                else if (Source == 2)
                {
                    String[] Multi = {"Multiplication","Division","Modulas"};
                    codePos = Arrays.binarySearch(Multi, 0, Multi.length, Target);
                }
                else
                {
                    System.out.println("Invalid Value");
                }

                switch (Source) {
                case 1:
                    switch (arith[codePos]) {  // <============= !! ERROR HERE !! 
                    case "Add":
                        System.out.println("Addition....!!!");
                        int a,b,c;

                        System.out.println("Enter value for A :");
                        a = S.nextInt();
                        System.out.println("Enter value for B :");
                        b = S.nextInt();

                        c = a + b;

                        System.out.println("The Result " + c);

                        break;
                    case "Sub":
                        System.out.println("Subtraction....!!!");
                        int d,e,f;

                        System.out.println("Enter value for D :");
                        d = S.nextInt();
                        System.out.println("Enter value for E :");
                        e = S.nextInt();

                        f = d - e;

                        System.out.println("The Result" + f);

                        break;
                    default:
                        System.out.println("Invalid Value...!!!");

                    }
                    break;

                case 2:
                    switch (Target) {
                    case 1:
                        System.out.println("multiplication....!!!");
                        int a,b,c;

                        System.out.println("Enter value for A :");
                        a = S.nextInt();
                        System.out.println("Enter value for B :");
                        b = S.nextInt();

                        c = a * b;

                        System.out.println("The Result" + c);

                        break;
                    case 2:
                        System.out.println("Division....!!!");
                        int d,e,f;

                        System.out.println("Enter value for D :");
                        d = S.nextInt();
                        System.out.println("Enter value for E :");
                        e = S.nextInt();

                        f = d / e;

                        System.out.println("The Result" + f);

                        break;

                    case 3:
                        System.out.println("Modulas....!!!");
                        int g,h,i;

                        System.out.println("Enter value for G :");
                        g = S.nextInt();
                        System.out.println("Enter value for H :");
                        h = S.nextInt();

                        i = g % h;

                        System.out.println("The Result" + i);

                        break;
                    default:
                        System.out.println("Invalid Value...!!!");

                    }
                    break;
                }

            }
        }

    }

}

1 个答案:

答案 0 :(得分:2)

您的问题是一个范围问题:您在“if”中定义arith,然后尝试在if语句之外使用它。每当你打开花括号时,你在堆栈上打开一个新的框架(就像调用一个方法一样),当这个框架完成执行时 - 从框架中删除框架,包括那里定义的所有局部参数。

更改:

if (Source == 1)
{
    String[] arith = {"Add","Sub"};
    codePos = Arrays.binarySearch(arith, 0, arith.length, Target);
}

为:

String[] arith = {"Add","Sub"};
if (Source == 1)
{                 
    codePos = Arrays.binarySearch(arith, 0, arith.length, Target);
}

应解决您的问题。