web-dev-qa-db-ja.com

Java、「変数名」を変数に解決できません

Javaを使用してEclipseを使用すると、次のエラーが表示されます。

"Variable name" cannot be resolved to a variable.

これでJavaプログラム:

public class SalCal {
    private int hoursWorked;
    public SalCal(String name, int hours, double hoursRate) {
        nameEmployee = name;
        hoursWorked = hours;
        ratePrHour = hoursRate;
    }
    public void setHoursWorked() {
        hoursWorked = hours;     //ERROR HERE, hours cannot be resolved to a type
    }
    public double calculateSalary() {
        if (hoursWorked <= 40) {
            totalSalary = ratePrHour * (double) hoursWorked;
        }
        if (hoursWorked > 40) {
            salaryAfter40 = hoursWorked - 40;
            totalSalary = (ratePrHour * 40)
                + (ratePrHour * 1.5 * salaryAfter40);
        }
        return totalSalary;
    }
}

このエラーメッセージの原因は何ですか?

18
user820913

変数 'hoursWorked'のスコープを見ると、それがクラスのメンバーであることがわかります(private intとして宣言されています)

問題を抱えている2つの変数は、コンストラクターにパラメーターとして渡されます。

このエラーメッセージは、「時間」がセッターの範囲外にあるためです。

12
Hugh Jones
public void setHoursWorked(){
    hoursWorked = hours;
}

そのメソッド内でhoursを定義していません。時間はパラメーターとして渡されず、変数として宣言されておらず、クラスメンバーとして使用されていないため、そのエラーが発生します。

9
Marc B

Eclipseバージョン4.2.1でこの奇妙なエラーが発生する奇妙な動作に気付きました。

String cannot be resolved to a variable

これでJavaコード:

if (true)
    String my_variable = "somevalue";
    System.out.println("foobar");

このコードは非常に単純で、条件が真であると考えるでしょう。my_variableをsomevalueに設定します。そして、foobarを出力するはずです。右?

間違った、上記のコンパイル時エラーが発生します。 Eclipseは、両方のステートメントがifステートメント内にあると想定することで、ミスを防止しようとしています。

このように条件ブロックを中括弧で囲むと:

if (true){
    String my_variable = "somevalue"; }
    System.out.println("foobar");

その後、コンパイルして正常に実行されます。どうやら括弧で囲まれていない条件文は、コンパイル時エラーを生成するための公平なゲームです。

3
Eric Leschinski