Java,“variables名”不能parsing为variables

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

什么原因导致这个错误信息

如果您查看variables“hoursWorked”的范围,您将看到它是该类的成员(声明为private int)

你遇到的两个variables作为parameter passing给构造函数。

错误消息是因为“小时”超出了setter的范围。

 public void setHoursWorked(){ hoursWorked = hours; } 

您没有在该方法中定义hours 。 小时数不作为parameter passing,它不是作为variables声明的,也不是作为类成员使用的,所以你会得到这个错误。

我已经注意到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"); 

然后编译并运行正常。 显然,括号内的条件是现在编译时错误的公平游戏。