2013-09-20 2 views
0

В настоящее время я изучаю Java и испытываю проблемы с параметрами. Я пытаюсь создать программу, которая принимает возраст в качестве входных данных, и классифицирует человека в зависимости от указанного возраста.Начальная проблема Java с параметрами

  • Моложе 2 является ребенок
  • Моложе 4 является малыш
  • Моложе 13 является ребенок
  • Моложе 20 подросток
  • Моложе 35 молодых взрослых
  • Моложе 65 среднего возраста
  • Моложе 100 является гериатрических
  • 100 и старше анти que

Нужно вернуть строку, классифицирующую человека. Я написал (а):

String getMaturityLevel(int age) { 

    if (age < 2) 
     return ("a baby"); 
    if (age < 4) 
     return ("a toddler"); 
    if (age < 13) 
     return ("a child"); 
    if (age < 20) 
     return ("a teenager"); 
    if (age < 35) 
     return ("a young adult"); 
    if (age < 65) 
     return ("middle aged"); 
    if (age < 100) 
     return ("geriatric"); 
    if (age >= 100) 
     return ("antique"); 
} 

Что не скомпилируется, так как ему нужен оператор возврата.

Итак, моя проблема в том, как эффективно писать код? Я не знаю, как сохранить результаты. Я пробовал что-то другое с age < 2.

Любая помощь будет оценена по достоинству.

+1

Что происходит, когда ни одно из условий не является истинным? –

+0

Попробуйте это http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html вам сначала нужно узнать инструкцию if-else – newuser

ответ

1

Я старой школы, так что я считаю, только один вход и выход точки для метода или функции ...

Суть вашей проблемы сводится к неспособности компиляторов, чтобы гарантировать, что любой if заявление «может» встречаться (вы и я знаем, что последний должен быть, но компилятор не будет рисковать).

Таким образом, вместо того, чтобы иметь return для каждого состояния, можно определить один return переменного и изменить его значение в зависимости от потребностей, к примеру ...

String getMaturityLevel(int age) { 
    String maturity = "antique"; 
    if(age < 2) 
     maturity = ("a baby"); 
    else if(age < 4) 
     maturity = ("a toddler"); 
    else if(age < 13) 
     maturity = ("a child"); 
    else if(age < 20) 
     maturity = ("a teenager"); 
    else if(age < 35) 
     maturity = ("a young adult"); 
    else if(age < 65) 
     maturity = ("middle aged"); 
    else if(age < 100) 
     maturity = ("geriatric"); 

    return maturity; 
} 

Теперь, в этом небольшом куске коды , это может не иметь большого значения, но когда вы имеете дело с более длинными методами или имеют несколько составных операторов if/loop, один оператор return в любом месте кода может испортить ваше понимание того, что, по вашему мнению, делает этот метод ... это нить, но все, что облегчает мою жизнь;)

Я хотел бы также рекомендуем использовать {...} вокруг ваших if заявлений, это остановит вас от делать что-то вроде ...

else if(age < 100) 
    maturity = ("geriatric"); 
    maturity = "Why is the returned value for every condition?"; 
+0

Thankyou Я пытался наклониться в сторону одного оператора return в конце, но не знал, как это сделать, и нам говорят не использовать {}, если он не станет блоком. т.е. более одной команды, выполненной за раз. Но в будущем я возьму его на борт, так как мы хотим, чтобы код был легко понятен. – user2797454

+2

Проблема с использованием '{...}' вокруг блоков 'if' заключается в том, что очень легко пропустить добавление дополнительной строки выполнения, где вы ожидаете, что она будет запущена только при условии, что вы хотите, но в конечном итоге находите он запускается каждый раз ... неприятная отладочная забава;) - Кроме того, как кто-то, кто был в отрасли примерно за 14 лет, я бы сказал, 'если (что-то) {singleLine}' более приемлемо;) – MadProgrammer

+0

Seconded , 'если что-то {do_work;}' приемлемо, доступно для чтения, и ваш компилятор не будет заботиться. Но 'если что-то do_work; do_more_work; 'произойдет сбой. Лучшая практика - быть более надежной, чем эффективная. – CamelopardalisRex

0

Редактировать: Неправильный вопрос.

Похоже, вы строго иметь только if заявления (не else if заявления), поэтому в конце последнего if заявление, вам необходимо добавить return заявление:

String getMaturityLevel(int age) { 

if(age < 2) 
    maturity = ("a baby"); 
if(age < 4) 
    return("a toddler"); 
if(age < 13) 
    return("a child"); 
if(age < 20) 
    return("a teenager"); 
if(age < 35) 
    return("a young adult"); 
if(age < 65) 
    return("middle aged"); 
if(age < 100) 
    return("geriatric"); 
if(age >= 100) 
    return("antique"); 
return "no maturity level found"; 
} 

Он будет возвращать только «нет уровня зрелости найдено ", если ни одно из предыдущих if условий не равно true.

+0

Убей меня таким ... о, подождите, вы отредактировали! : P По-прежнему ты пришел первым. – CamelopardalisRex

1

В конце, где

if(age >= 100) 
return("antique"); 

написать

else 
return("antique"); 

Это потому, что компилятор считает, что есть возможность не оператор возврата, если они все, если (в себе сценарий, где все ложно).

0

Я рекомендую использовать тип Enum (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html), который будет перечислять уровни зрелости. Каждая зрелость будет иметь значение, которое будет вашей строкой. Затем вы можете перебирать элементы Enum и создавать одну или две строки кода ... если каждый элемент также имеет «maturityAge».

public enum MaturityEnum { 
    BABY (2, "A baby"), 
    // etc 
    private int maturityAge; 
    private String maturityMsg ; 

    // Accessors etc 
} 

public int getMaturityLevel(int age) { 
    for (MaturityEnum maturity : MaturityEnum.getValues()) { 
    if (maturity.getMaturityAge() > age) 
     return maturity.getMaturityMsg() ; 
     // only works if the values of MaturityEnum are in the good order 
     // to ensure this, you could make a function that gives the list of MaturityEnums 
     // in the good order :) 
    } 
} 
0

На самом деле, даже лучше, это конец его с return "Error" в самом конце, не удаляя ничего. Эта «ошибка» никогда не должна произойти, но если это произойдет, вы знаете, что что-то пошло не так. Я думаю, это немного более круто, и вы можете сделать квалификацию для «антиквариата» (> 100) ясной, не прочитав ни одного другого варианта.

0

Я бы определенно изменить все, если операторы после первой еще если. Также я бы рекомендовал разместить скобки вокруг друг друга, если/if-инструкция.

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