2015-10-31 6 views
0

Я пытаюсь написать простую функцию if, которая вычисляет, имеет ли кто-либо право на получение бонуса или нет. Это делается в классе «Сотрудник», который имеет поля:Неопределенный оператор для функции if - Java

private int id = 0; 
private String forename; 
private String surname; 
private Salary salary; 
private CompanyPosition companyPosition; 

Вот ПЧ:

public boolean eligibleForBonus() {  
    boolean isEligible = true; 
    if (salary >= 40000) { 
     isEligible = true; 
    } 
    return isEligible; 
} 

Зарплата другой класс с полем

private double salary = 0.0; 

(также есть все геттеры и сетки)

Однако, я получаю сообщение об ошибке на линии с IF, которая гласит:

Оператор> = не определен для типа аргумента Оклада, внутр

+4

В сообщении говорится все. Что нужно, если (банан> = яблоко) тест? –

ответ

4

Вам просто нужно позвонить своему добытчик, чтобы получить зарплату от salary объекта типа Salary:

if (salary.getSalary() >= 40000) 

Следует отметить, что весь ваш метод может быть записано более просто, как это:

public boolean eligibleForBonus(){ 
    return salary.getSalary() >= 40000; 
} 

В качестве побочного примечания ваш текущий метод не работает должным образом, потому что вы инициализировали флаг isEligible до true вместо false (и поэтому метод всегда будет возвращаться true независимо от того, какова зарплата).

Вы также можете ввести постоянную, чтобы удерживать минимальную зарплату, необходимую для бонуса, и использовать ее в другом месте. Это позволяет избежать использования магических чисел и правильно документировать, что означает номер 40000.

private static final double MINIMUM_SALARY_FOR_BONUS = 40000; 

public boolean eligibleForBonus(){ 
    return salary.getSalary() >= MINIMUM_SALARY_FOR_BONUS; 
} 
+0

Wow! Большое спасибо за быстрый ответ! Вы действительно очистились я понял это и сделал еще один шаг. Я ценю это! – AcidMicrowave

0

salary является ссылкой на объект, и вы не можете сравнить ссылку на объект с примитивным типом (если его обертка).

Вы должны сравнить, как if (salary.getSalary() >=40000)

+0

Простой и полезный! Спасибо человек – AcidMicrowave

+0

Больше всего приветствую !! Вы можете подняться, если хотите. – Rehman

+0

Мне нужно иметь более 15 человек: ((я вернусь и сделаю это, когда мне будет 15 репа !!) – AcidMicrowave

0

Вы пытаетесь проверить, если ваш объект Salary является> = 40000. Вы должны использовать сорбент из salary члена вам Salary класса.

if (salary.getSalary() >= 40000) { 
    isEligible = true; 
} 

Кроме того, вы действительно не нужен булево и если в вашем методе:

public boolean eligibleForBonus() { 
    return salary.getSalary() >= 40000 
} 

Вы не должны инициализировать String переменную с null.

0

Вы должны сделать salary.getSalary() >= 40000, Зарплата - это объект, вы хотите сравнить значение его поля «зарплата» (странное именование).

Btw: вы никогда не вернете ложь, ваш init ошибочен и бесполезен.

Смежные вопросы