3

for loopユーザーが自分のクラスのオブジェクトを設定できるようにするためにa を使用しようとしています。

正直に言うと、これは ですが、まだhomework project到達してfor loopsいません。少し高度になるとクールだと思いました。

しかし、入力がメソッドに送信される部分を入力すると、non-static変数はコンテキストで使用できないと表示されstaticます。

これを行う方法はありますか、またはこれらのオブジェクトを設定するために 2X と同じ数の変数とコード行を使用する必要がありますか?

これがforループのある部分です

 for (int x=1; x<=2; x++)
   {
    //get input before setting up 2 objects of Employee
    Scanner input = new Scanner ( System.in);
    System.out.print("\nPlease enter the employee's name");
    name = input.nextLine();

    Scanner input1 = new Scanner ( System.in);
    System.out.print("\nPlease enter the employee's department");
    dept = input1.nextLine();

    Scanner input2 = new Scanner ( System.in);
    System.out.print("\nPlease enter the employee's name");
    wage = input2.nextdouble();

    // set Employee objects 
    if (x == 1) {
        Employee_irishRodger employee1 = new Employee_irishRodger(name, dept, wage);
    } else {
        Employee_irishRodger employee2 = new Employee_irishRodger(name, dept, wage);
    }

}
4

3 に答える 3

3

namedeptおよびwageは、一部のクラスの非静的フィールドであると想定しています。エラーが発生する理由は、for-loop を使用しているメソッドが実際にはstatic(クラスの各インスタンスに関連付けられていないため)、それを介して非静的フィールドにアクセスできないためです。staticメソッド ヘッダーからキーワードを削除してみてください。

staticキーワードの詳細については、こちらをご覧ください。


Scanner別の注意として、毎回新しいものを作成する必要はなく、そのまま使用し続けることができますinput。さらに、これをループScannerの範囲外でインスタンス化できます。for

Scanner input = new Scanner(System.in);
for (int x = 1 ; x <= 2 ; x++) {
    System.out.print("\nPlease enter the employee's name");
    name = input.nextLine();

    System.out.print("\nPlease enter the employee's department");
    dept = input.nextLine();

    System.out.print("\nPlease enter the employee's name");
    wage = input.nextdouble();

    ...
}
input.close();  // don't forget to close the scanner when you're done

Scannerインスタンス化の数が6から 1 になりました。

于 2012-10-07T17:50:56.413 に答える
3

私ならもっとこうします。好きなだけ従業員を持つことができます。

Scanner input = new Scanner(System.in);
int numEmployees = 5;
List<Employee_irishRodger> employees = new List<Employee_irishRodger>();
for (int i = 0; i < numEmployees; ++i) {
    System.out.print("\nPlease enter the employee's name");
    String name = input.nextLine();
    System.out.print("\nPlease enter the employee's department");
    String dept = input.nextLine();
    System.out.print("\nPlease enter the employee's wage");
    String wage = input.nextLine();
    employees.add(new Employee_irishRodger(name, dept, wage));
}

Employee_irishRodgerクラス名の由来がわかりません。だけではないのはなぜEmployeeですか?

于 2012-10-07T17:57:28.513 に答える
1

namedeptおよびローカルにしwageます。

于 2012-10-07T17:53:17.920 に答える