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 则可能没有 return 语句(想象一个一切都为假的场景)。

于 2013-09-20T01:09:53.413 回答
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?";
于 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 元素并制作一两行代码......如果每个元素也有一个“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 :)
  }
}
于 2013-09-20T01:13:38.357 回答
0

实际上,更好的是,在最后以 areturn "Error"结束而不删除任何内容。这个“错误”永远不应该发生,但如果发生了,你就知道出了问题。我认为它更健壮一点,并且允许您在无需阅读其他选项的情况下仍然清楚地确定“古董”(> 100)的资格。

于 2013-09-20T01:14:09.227 回答
0

我肯定会将第一个 if 语句之后的所有 if 语句更改为 else if。另外,我建议在 if / if 语句周围放置括号。

于 2015-10-01T08:15:46.557 回答