web-dev-qa-db-fra.com

Java, "Nom de variable" ne peut pas être résolu en une variable

J'utilise Eclipse en utilisant Java, j'obtiens cette erreur:

"Variable name" cannot be resolved to a variable.

Avec ce programme 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;
    }
}

Qu'est-ce qui cause ce message d'erreur?

18
user820913

Si vous regardez la portée de la variable 'hoursWorked', vous verrez que c'est un membre de la classe (déclaré comme int int)

Les deux variables avec lesquelles vous rencontrez des problèmes sont transmises en tant que paramètres au constructeur.

Le message d'erreur est dû au fait que 'heures' est hors de portée dans le setter.

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

Vous n'avez pas défini hours dans cette méthode. heures n'est pas transmis en tant que paramètre, il n'est pas déclaré en tant que variable et il n'est pas utilisé en tant que membre de la classe, vous obtenez donc cette erreur.

9
Marc B

J'ai remarqué un comportement bizarre avec Eclipse version 4.2.1 qui me livrait cette erreur:

String cannot be resolved to a variable

Avec ce Java:

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

On pourrait penser que ce code est très simple, le conditionnel est vrai, nous définissons my_variable sur somevalue. Et il devrait imprimer foobar. Droite?

Mauvais, vous obtenez l'erreur de temps de compilation mentionnée ci-dessus. Eclipse essaie de vous empêcher de faire une erreur en supposant que les deux instructions se trouvent dans l'instruction if.

Si vous mettez des accolades autour du bloc conditionnel comme ceci:

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

Ensuite, il compile et fonctionne correctement. Les conditions apparemment mal placées entre parenthèses sont un jeu correct pour générer des erreurs de temps de compilation maintenant.

3
Eric Leschinski