2013-10-15 4 views
1

Я просто пытаюсь сделать простой оператор if, который сообщает вам, какое личное пособие вы получаете, в зависимости от вашего возраста. В классе Employee есть поле для «возраста», поэтому я перешел через возраст. Но я получаю ошибку: Оператор> не определен для типа (ов) аргумента Employee, int.Оператор <не определен для типов аргументов Employee, int

Куда я иду не так? Вот мой код:

double calculatePersonalAllowance(Employee age){ 

    if (this.age < 65) { 
     personalAllowance = 94440; 

    } 

     else if (this.age >= 65 && <75){ 
     personalAllowance = 10500; 

    } 

     else if (this.age >75){ 
     personalAllowance = 10660; 

    return personalAllowance; 
    } 
+0

'age' плохой имя переменной employee. – Dukeling

+1

И плохо иметь параметры метода, которые не используются в методе. – Kayaman

+0

Не публиковать [SSCCE] (http://sscce.org/) всегда затрудняет нашу жизнь (обратите особое внимание на «автономную» часть). – Dukeling

ответ

6

else if (this.age >= 65 && <75)

Должно быть:

else if (this.age >= 65 && this.age <75) 

Настоятельно рекомендуется прочитать 15.23. Conditional-And Operator && и The if-then and if-then-else Statements.

Кроме того, это излишним иметь параметр, который никогда не используется .. Если вы не используете age, удалите его из подписи метода:

double calculatePersonalAllowance() 

Не волнуйтесь, age вы имеете в виду до является членом класса, а не местным.

+0

Я все еще получаю ошибку, что оператор «> =» не определен. Есть идеи? – user2131803

+0

Не может быть ....... – Maroun

+0

Я не знаю, что будет. Я изменил его, как вы сказали. – user2131803

1

Первое:

"There is a field for "age" in the Employee class, which is why I have passed over the age"

Вы не прошли по возрасту, вы сделали следующее: (Employee возраст), который проходит через ссылку на объект Employee, а не поле возраста. переменная «возраст» между скобками - это переменная, локальная для метода, ссылающегося на объект Employee, который вызвал этот метод, чтобы получить возраст, который вам нужно будет либо получить непосредственно из объекта сотрудника, на который вы ссылаетесь, либо через getter метод.

Второе: Способ, которым Если выражение читается следующим образом:

if(expression){do code} //where expression returns either true or false 

Или с некоторыми операторами:

if(expression && expression) 

Вы следующим образом:

else if (this.age >= 65 && <75){ 
//Which equates to the below: 
else if(expression && <75){ 

компилятор ожидает выражения, но находит операнд. У вас есть возраст, когда аргумент передан вашему методу, но также, похоже, пытается получить доступ к полю с именем age. Я бы рекомендовал изменить аргумент метода на что-то вроде (Employee emp). Затем измените там, где у вас есть this.age, на emp.age.

else if (emp.age >= 65 && emp.age <75){ 
//You effectively make 
else if(expression && expression){ 

который удовлетворяет требованиям компилятора!

1

Я думаю this.age должны быть изменения в employee.age и (this.age >= 65 && <75) нужно изменить, как if (employee.age >= 65 && employee.age<75)

полный метод, как показано ниже.

double calculatePersonalAllowance(Employee employee){ 
     double personalAllowance = 0; 
    if (employee.age < 65) { 
     personalAllowance = 94440; 

    }else if (employee.age >= 65 && employee.age<75){ 
      personalAllowance = 10500; 

    }else if (employee.age >75){ 
      personalAllowance = 10660;   
    } 
     return personalAllowance; 
} 
+0

er, почему вы выбрали 'double' для типа? Обратите внимание, что если вы пытаетесь представить дробную сумму (например .1), числа с плавающей запятой имеют некоторые встроенные варианты дизайна, которые дают неточные результаты. –

+1

@ Clockwork-Muse .. спасибо .. я не добавил ничего нового. я только что изменил то, что присутствует в вопросе OP. – Prabhakaran

+1

Извините, я пропустил обратную подпись в исходном вопросе. –

0

Если в вас метод вы хотите проверить Собственость возраст от его параметров необходимо использовать параметры все way.In, что метод случай может быть статичным, как это:

static double calculatePersonalAllowance(Employee employee) 
{ 
    double personalAllowance = 0.0;//default value 
    int age = employee.age; 
    if (age < 65) 
    { 
     personalAllowance = 94440; 
    } 
    else if (age >= 65 && age <75) 
     { 
      personalAllowance = 10500; 
     } 
     else if (age >75) 
     { 
       personalAllowance = 10660; 
     } 
    return personalAllowance; 
} 
Смежные вопросы