Подтвердить что ты не робот

Java, "Имя переменной" не может быть разрешено переменной

Я использую Eclipse с помощью Java, я получаю эту ошибку:

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

Что вызывает это сообщение об ошибке?

4b9b3361

Ответ 1

Если вы посмотрите на область переменной "hoursWorked", вы увидите, что она является членом класса (объявлена ​​как private int)

Две переменные, с которыми вы столкнулись, передаются в качестве параметров конструктору.

Сообщение об ошибке связано с тем, что "часы" недоступны в настройщике.

Ответ 2

public void setHoursWorked(){
    hoursWorked = hours;
}

Вы не определили hours внутри этого метода. часы не передаются как параметр, он не объявляется как переменная и не используется как член класса, поэтому вы получаете эту ошибку.

Ответ 3

Я заметил странное поведение с Eclipse версии 4.2.1, доставив мне эту ошибку:

String cannot be resolved to a variable

С помощью этого кода Java:

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

Вы бы подумали, что этот код очень прост, условное значение true, мы устанавливаем значение my_variable на некоторое значение. И он должен печатать foobar. Правильно?

Неправильно, вы получаете вышеупомянутую ошибку времени компиляции. Eclipse пытается помешать вам совершить ошибку, предположив, что оба оператора находятся в инструкции if.

Если вы поместите скобки вокруг условного блока следующим образом:

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

Затем он компилируется и работает нормально. По-видимому, плохо заключенные в скобки условности являются честной игрой для генерации ошибок времени компиляции.