我目前正在学习Java,并且一直遇到参数问题。我正在尝试创建一个以年龄为输入的程序,并根据所述年龄对该人进行分类。
需要返回一个对该人进行分类的字符串。我写了这个:
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
不同的东西。
任何帮助都将不胜感激。
答案 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语句,我建议在每个其他地方放置括号。