我的JAVA代码有什么问题?

时间:2015-10-02 04:03:41

标签: java

任何人都可以帮我写这个问题的代码:

  

你驾驶的速度有点太快,一名警察阻止你。编写代码来计算结果,编码为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;
  } 
}

4 个答案:

答案 0 :(得分:3)

如果Java编译器抱怨你的代码,它几乎总能告诉你究竟是什么问题,你应该仔细阅读错误信息(以及向你请求帮助的人显示它)。

在这种特殊情况下,它可能会抱怨无法访问的代码,因为无论你的速度是什么,它都会从第一个if块返回一些内容,这意味着你无法到达第二个。我还不确定当规范没有提到这种可能性时,你从代码中返回78的原因。

是您的代码行为的唯一原因(编译器接受它)是因为它也是无法访问的。

最重要的是,你在第二个区块中有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的大票