2013-07-12 1 views
0

Я пытаюсь использовать инструкцию вложенного оператора. Можно ли использовать разные типы выражений во вложенных операторах 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; 
       } 

      } 
     } 

    } 

} 
+0

Что происходит, когда вы запускаете эту программу? –

+0

В чем проблема? –

+2

Похоже, у вас есть все, готовое ответить на ваш собственный вопрос ... – jahroy

ответ

2

Вашей задачей является обзорной: вы определяете 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); 
} 

должно решить проблему.

+0

Спасибо за ваш mail.i выпрямили вышеуказанную проблему. После исправления, выполняя код, я становлюсь ниже ошибки. Исключение в потоке «main» java.lang.ClassCastException: java.lang.Integer нельзя передать в java.lang.String \t в java.lang.String.compareTo (Unknown Source) \t в java.util.Arrays.binarySearch0 (Unknown Source) \t в java.util.Arrays.binarySearch (Unknown Source) \t в Choice1.main (CHOICE1 .java: 25). –

+0

проблема решена ... –

Смежные вопросы