Java, “Nome da variável” não pode ser resolvido para uma variável

Eu uso o Eclipse usando Java, eu recebo este erro:

"Variable name" cannot be resolved to a variable. 

Com este programa 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) { salaryAfter40 = hoursWorked - 40; totalSalary = (ratePrHour * 40) + (ratePrHour * 1.5 * salaryAfter40); } return totalSalary; } } 

O que causa essa mensagem de erro?

Se você olhar o escopo da variável ‘hoursWorked’ você verá que é um membro da class (declarado como private int)

As duas variables ​​com as quais você está tendo problemas são passadas como parâmetros para o construtor.

A mensagem de erro é porque ‘horas’ está fora do escopo no setter.

 public void setHoursWorked(){ hoursWorked = hours; } 

Você não definiu hours dentro desse método. horas não são passadas como um parâmetro, ele não é declarado como uma variável e não está sendo usado como um membro de class, então você obtém esse erro.

Eu notei comportamento bizarro com o Eclipse versão 4.2.1 me entregando este erro:

 String cannot be resolved to a variable 

Com este código Java:

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

Você pensaria que esse código é muito direto, a condicional é verdadeira, nós definimos my_variable para algum valor. E deve imprimir foobar. Certo?

Errado, você obtém o erro de tempo de compilation mencionado acima. O Eclipse está tentando evitar que você cometa um erro, assumindo que ambas as instruções estão dentro da instrução if.

Se você colocar chaves ao redor do bloco condicional assim:

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

Então compila e corre bem. Aparentemente condicionais mal suportados são um bom jogo para gerar erros de tempo de compilation agora.