任何人都可以帮我写这个问题的代码:
你驾驶的速度有点太快,一名警察阻止你。编写代码来计算结果,编码为int值:0 =没有票,1 =小票,2 =大票。如果速度为60或更低,则结果为0.如果速度在61和80之间,则结果为1.如果速度为81或更高,则结果为2.除非是您的生日 - 在那一天,您的在所有情况下,速度可以高出5个。
这就是我得到的,它没有编译。
public int caughtSpeeding(int speed, boolean isBirthday) {
int noTicket = 0;
int smallTicket = 1;
int bigTicket = 2;
if (speed <= 60) {
return noTicket;
} else if (speed >= 61 && speed <= 80) {
return smallTicket;
} else if (speed >= 81){
return bigTicket;
} else{
return 8;
}
if (isBirthday) && (speed <= 65) {
return noTicket;
} else if (isBirthday) && (speed >= 66 && speed <= 86) {
return smallTicket;
} else if(isBirthday) && (speed >= 86) {
return bigTicket;
} else {
return 7;
}
}
答案 0 :(得分:3)
如果Java编译器抱怨你的代码,它几乎总能告诉你究竟是什么问题,你应该仔细阅读错误信息(以及向你请求帮助的人显示它)。
在这种特殊情况下,它可能会抱怨无法访问的代码,因为无论你的速度是什么,它都会从第一个if
块返回一些内容,这意味着你无法到达第二个。我还不确定当规范没有提到这种可能性时,你从代码中返回7
和8
的原因。
最重要的是,你在第二个区块中有if
个陈述的形式:
if(isBirthday) && (speed <= 65){
无效。 整个表达式周围需要有括号,例如:
if ((isBirthday) && (speed <= 65)) {
在我看来,更好的编码方法是让一组if
语句解决问题,并在你的生日时引入宽大缓冲区。
我也不是if (x) return y else ...
构造的忠实粉丝,因为它引入了不必要的代码缩进。所以我会看一些像(伪代码)的东西:
def fine(speed, isbirthday):
if isbirthday:
leniancy = 5
else:
leniency = 0
if speed <= 60 + leniency:
return 0
if speed <= 80 + leniency:
return 1
return 2
答案 1 :(得分:0)
第一个 else if 块在方法体外,并且显然是一个错误。它应该在第一个 if 块之后并且在方法体内。事实上,你的方法体在任何 if-else 块结束之前结束,它们都应该在方法体内。
答案 2 :(得分:0)
试试这个:
public int caughtSpeeding(int speed, boolean isBirthday) {
int noTicket = 0;
int smallTicket = 1;
int bigTicket = 2;
if (isBirthday && speed <= 65) {
return noTicket;
} else if (isBirthday && speed >= 66 && speed <= 86) {
return smallTicket;
} else if(isBirthday && speed >= 86) {
return bigTicket;
} else if (speed <= 60) {
return noTicket;
} else if (speed >= 61 && speed <= 80) {
return smallTicket;
} else if (speed >= 81){
return bigTicket;
} else{
return 8;
}
}
请注意isBirthday
如何与其他条件组合。
答案 3 :(得分:0)
除格式化问题外,还存在一个逻辑问题。您正在检查(isBirthday) 后返回值。这项检查需要先完成。此外,看起来你的代码说如果是一个人的生日就没有返回票,但是家庭作业:)看起来结果应该是你得到66-85的小票,86的大票