Java, “Variabelenaam” kan niet worden omgezet in een variabele

Ik gebruik Eclipse met Java, ik krijg deze foutmelding:

"Variable name" cannot be resolved to a variable.

Met dit Java-programma:

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;
    }
}

Wat veroorzaakt deze foutmelding?


Antwoord 1, autoriteit 100%

Als je kijkt naar het bereik van de variabele ‘hoursWorked’ zul je zien dat het een lid van de klas is (aangeduid als private int)

De twee variabelen waar je problemen mee hebt, worden als parameters doorgegeven aan de constructor.

De foutmelding is dat ‘hours’ buiten bereik valt in de setter.


Antwoord 2, autoriteit 62%

public void setHoursWorked(){
    hoursWorked = hours;
}

Je hebt geen hoursgedefinieerd binnen die methode. hours wordt niet doorgegeven als parameter, het is niet gedeclareerd als een variabele en het wordt niet gebruikt als een klaslid, dus je krijgt die foutmelding.


Antwoord 3, autoriteit 19%

Ik heb bizar gedrag opgemerkt met Eclipse versie 4.2.1 die me deze foutmelding gaf:

String cannot be resolved to a variable

Met deze Java-code:

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

Je zou denken dat deze code heel eenvoudig is, de voorwaardelijke is waar, we stellen my_variable in op een of andere waarde. En het zou foobar moeten afdrukken. Rechts?

Fout, je krijgt de bovengenoemde compile time-fout. Eclipse probeert te voorkomen dat u een fout maakt door aan te nemen dat beide instructies binnen het if-statement vallen.

Als je accolades als volgt om het voorwaardelijke blok zet:

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

Vervolgens compileert en werkt het prima. Blijkbaar zijn conditionals tussen haakjes een redelijk spel om nu compileerfouten te genereren.

Other episodes