0

3つの選択肢があるシンプルなメニューを作りたい:

従業員マネージャーで「新しい従業員の作成」、「すべての従業員の表示」、および「終了」(以下のコード) を実行しましたが、成功しませんでした (コンパイル エラー)。

BlueJ エディターは、「case 2」ステートメントのオブジェクト「m」、「s」、および「l」を認識できません。「ケース1」でオブジェクトの値を取得し、「ケース2」で使用する方法はありますか? どうもありがとう!

import java.util.Scanner;

public class Test
{
    public static void main(String[] args)
    {
        int ch;
        do{
            System.out.println("EMPLOYEE MANAGER\n");
            System.out.println("1. Create new employees\n");
            System.out.println("2. Display all employees\n");
            System.out.println("3. Quit\n");
            System.out.print("Your choice: ");

            Scanner input = new Scanner(System.in);
            ch = input.nextInt();

            switch(ch){
                case 1: System.out.println("== CREATE NEW EMPLOYEES ==");
                    System.out.println();
                    Manager   m = new Manager();
                    Scientist s = new Scientist();
                    Labourer  l = new Labourer();
                    m.newManager();
                    s.newScientist();
                    l.newLabourer();
                    System.out.println();
                    break;

                case 2: System.out.println("==  PREVIEW  EMPLOYEES  ==");        
                    System.out.println();
                    m.display();
                    s.display();
                    l.display();
                    System.out.println();
                    System.out.println();
                    break;
                case 3: System.exit(0);
                default: System.out.println("Invalid choice!");
            }
        } while(ch >= 1 && ch <=4);
    }
}
4

3 に答える 3

2

それらはブロックに対してローカルであり、switch ブロックの外で宣言します

Manager   m = new Manager();
Scientist s = new Scientist();
Labourer  l = new Labourer();

switch(){...}

これはあなたの質問によく答えますが、もう少し詳細を追加したいと思います

のようなケースブロックでブラケットを置かない場合

 switch(i){
   case 1:
    String str="abc";
    System.out.println(str);
   case 2:
     // it will give you compile time error
     //duplcate local variable str
     String str="abc";

    }

このstrインスタンスは、他の case ブロックにも表示されます

于 2012-06-13T05:06:21.660 に答える
1

Q: 「ケース 1」でオブジェクトの値を取得し、「ケース 2」で使用する方法はありますか?

A: いいえ。case ブロックの要点は「どちらか一方」です。

「何か」に基づいて「何か」を実行したい場合は、2 つの別個の制御構造が必要になります。

例:

import java.util.Scanner;

public class Test
{
    Manager m = null;
    Scientist s = null;
    Labourer  l = null;

    public static void main(String[] args) {
       Test test = new Test().doIt ();
    }

    private void doIt () {
       int ch;
       do{
          System.out.println("EMPLOYEE MANAGER\n");
          System.out.println("1. Create new employees\n");
          System.out.println("2. Display all employees\n");
          System.out.println("3. Quit\n");
          System.out.print("Your choice: ");

          Scanner input = new Scanner(System.in);
          ch = input.nextInt();

          switch(ch) {
          case 1: 
              System.out.println("== CREATE NEW EMPLOYEES ==");
              getEmployees ();
              break;

          case 2: 
              System.out.println("==  PREVIEW  EMPLOYEES  ==");
              previewEmployees ();
              break;

          case 3: 
              System.exit(0);
              break;

          default: 
              System.out.println("Invalid choice!");
       }
    } while(ch >= 1 && ch <=4);
 }

 private void getEmployees () {
    System.out.println();
    m = new Manager();
    s = new Scientist();
    labourer  l = new Labourer();
    m.newManager();
    s.newScientist();
    l.newLabourer();
    System.out.println();
 }

 private void previewEmployees () {
    ...  

}

于 2012-06-13T05:09:06.337 に答える
0

オブジェクト m、s、および l を、スイッチの外側のより広い範囲で定義します。また、オブジェクトを null 値で初期化し、使用する前に検証してください。

Manager   m = null;
Scientist s = null;
Labourer  l = null;
do{
    //your code here....
        switch(ch) {
        case 1:
            m = new Manager();
            //the rest of your code here...
            break;
        case 2:
            if (m != null) {
                m.display(); //and so on
            }
    }
}
于 2012-06-13T05:06:43.577 に答える