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;
}
}
このエラーメッセージの原因は何ですか?
変数 'hoursWorked'のスコープを見ると、それがクラスのメンバーであることがわかります(private intとして宣言されています)
問題を抱えている2つの変数は、コンストラクターにパラメーターとして渡されます。
このエラーメッセージは、「時間」がセッターの範囲外にあるためです。
public void setHoursWorked(){
hoursWorked = hours;
}
そのメソッド内でhours
を定義していません。時間はパラメーターとして渡されず、変数として宣言されておらず、クラスメンバーとして使用されていないため、そのエラーが発生します。
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");
その後、コンパイルして正常に実行されます。どうやら括弧で囲まれていない条件文は、コンパイル時エラーを生成するための公平なゲームです。