0

私は現在Javaを学んでおり、パラメーターに問題があります。年齢を入力として取り、その年齢に基づいて人を分類するプログラムを作成しようとしています。

  • 2歳未満は赤ちゃん
  • 4歳未満は幼児です
  • 13歳未満は子供です
  • 20歳未満はティーンエイジャー
  • 35歳未満はヤングアダルト
  • 65歳未満は中年
  • 100歳未満は高齢者
  • 100以上はアンティーク

人を分類する文字列を返す必要があります。私はこれを書きました:

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

return ステートメントが必要なため、これはコンパイルされません。

だから私の問題は、コードを効果的に書くにはどうすればよいですか? 結果の保存方法がわかりません。で何か違うことを試しましたage < 2

どんな助けでも大歓迎です。

4

6 に答える 6

1

最後に

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

書きます

else
return("antique");

これは、すべてが if の場合 (すべてが false であるシナリオを想像してください)、return ステートメントがない可能性があるとコンパイラが判断するためです。

于 2013-09-20T01:09:53.413 に答える
1

私は古い学校なので、メソッドまたは関数の入口と出口のポイントは 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、コード内のどこにでも 1 つのステートメントがあるだけで、あなたが考えていることの理解が台無しになる可能性があります。メソッドがやっている...それはちょっとしたピックですが、私の人生を楽にするものは何でも;)

{...}また、ステートメントの前後に使用することをお勧めしますif。これにより、次のようなことを行うことができなくなります...

else if(age < 100)
    maturity = ("geriatric");
    maturity = "Why is the returned value for every condition?";
于 2013-09-20T01:17:06.460 に答える
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.

于 2013-09-20T01:07:50.020 に答える
0

成熟度を列挙する列挙型 ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html )を使用することをお勧めします。各成熟度には、文字列となる「値」があります。次に、Enum 要素を反復処理して、1 行または 2 行のコードを作成できます...各要素にも「成熟度」がある場合。

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 :)
  }
}
于 2013-09-20T01:13:38.357 に答える
0

実際には、return "Error"何も削除せずに最後に a で終了する方がさらに良いです。この「エラー」は絶対に発生してはなりませんが、発生した場合は、何か問題が発生したことがわかります。それはもう少し堅牢だと思います。他のオプションを1つも読まなくても、「アンティーク」(> 100)の資格を明確にすることができます。

于 2013-09-20T01:14:09.227 に答える