初学者Java遇到参数问题

时间:2013-09-20 01:06:52

标签: java parameters return

我目前正在学习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");
}

由于需要返回语句而无法编译。

所以我的问题是,我如何有效地编写代码?我不知道如何存储结果。我尝试了与age < 2不同的东西。

任何帮助都将不胜感激。

6 个答案:

答案 0 :(得分:1)

最后

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

else
return("antique");

这是因为编译器认为如果它们都是if(假设一切都是假的情况),则可能没有return语句。

答案 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语句破坏你对你认为该方法正在做什么的理解......这是一个挑剔,但任何使我的生活更轻松的事情;)

我还鼓励您在{...}声明周围使用if,这会阻止您做类似......

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

答案 2 :(得分: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,则只返回“未找到成熟度级别”。

答案 3 :(得分: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 :)
  }
}

答案 4 :(得分:0)

实际上,更好的是,在最后用return "Error"结束它而不删除任何东西。永远不会发生这种“错误”,但如果确实如此,你就会知道出了什么问题。我认为它更加强大,并且允许您在不必阅读其他选项的情况下使“古董”(&gt; 100)的资格清晰无误。

答案 5 :(得分:0)

我肯定会在第一个之后将所有if语句更改为else if。另外,如果/ if语句,我建议在每个其他地方放置括号。