Java,“变量名称”无法解析为变量

时间:2011-09-28 19:50:59

标签: java variables name-resolution

我使用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;
    }
}

导致此错误消息的原因是什么?

3 个答案:

答案 0 :(得分:11)

如果查看变量'hoursWorked'的范围,您会看到它是该类的成员(声明为private int)

您遇到问题的两个变量将作为参数传递给构造函数。

错误消息是因为“小时”超出了设置器中的范围。

答案 1 :(得分:9)

public void setHoursWorked(){
    hoursWorked = hours;
}

您尚未在该方法中定义hours。小时不作为参数传入,它不会被声明为变量,并且它不会被用作类成员,因此您会收到该错误。

答案 2 :(得分:3)

我注意到Eclipse版本4.2.1的奇怪行为给我带来了这个错误:

String cannot be resolved to a variable

使用此Java代码:

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

您会认为此代码非常简单,条件为真,我们将my_variable设置为某个值。它应该打印foobar。对?

错误,您收到上述编译时错误。 Eclipse试图通过假设两个语句都在if语句中来防止你犯错。

如果你在条件块周围加上大括号:

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

然后它编译并运行正常。显然,包括在内的条件错误是公平的游戏,现在可以产生编译时错误。