0

ネストされた 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;
                }

            }
        }

    }

}
4

1 に答える 1

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);
}

あなたの問題を解決するはずです。

于 2013-07-12T18:29:15.570 に答える