简单的超速票务计划

时间:2017-04-08 23:09:17

标签: java

我正在用Java做一个简单的超速罚单程序。当我输入负数时,我的输出"速度不能为负数。再试一次。"弹出但数字" $ 0"也出现了。

如何编写我的程序,这样如果我输入一个负值,它就会输出"速度不能为负数。再试一次。"而不是这个和" $ 0"?

这是我的代码:

public class Speeding {

  public static void main(String[] args) {

    System.out.println("Enter speed:");
    int speed = IO.readInt();

    if (speed < 0){
      System.out.println("Speed cannot be negative. Try again.");
    }
    if (speed <=60){
      System.out.println("$0");
    }else if (speed > 60 && speed <=75){
      System.out.println("$100");
    }else if (speed > 75 && speed <=90){
      System.out.println("$500");
    }

  }

}

4 个答案:

答案 0 :(得分:0)

非常简单:您的第二个if必须是else if

检查原始代码并添加评论:

// This will execute if speed is negative
if (speed < 0){
    System.out.println("Speed cannot be negative. Try again.");
}

// This will ALSO EXECUTE if speed is negative!
if (speed <=60){ 
    System.out.println("$0");
}else if (speed > 60 && speed <=75){
    System.out.println("$100");
}else if (speed > 75 && speed <=90){
    System.out.println("$500");
}

这应该是:

if (speed < 0){
    System.out.println("Speed cannot be negative. Try again.");
}else if (speed <=60){ 
    System.out.println("$0");
}else if (speed > 60 && speed <=75){
    System.out.println("$100");
}else if (speed > 75 && speed <=90){
    System.out.println("$500");
}

为什么?

您目前有两个连续的if/else块。第一个由if组成,第二个由ifelse if组成。
如果speed为负数,则第一个块if将触发 - 第二个块的if也将触发。

然而,将第二个if转换为else if后,所有这一切都会变成一个if/else块。因此,如果第一个条件触发,Java甚至不会查看剩余部分,并且代码的行为与预期一致。

另外...

...您可以将条件speed <= 60更改为speed >= 0 && speed <= 60 这样,第二个if将不再触发负值。

答案 1 :(得分:0)

目前,您有两个if语句,因此当您输入一个负数时,它会触发此if (speed < 0)条件和此(speed <=60)条件。

要克服这个问题,你需要使用else-if块,这实际上意味着只会执行一个语句。

int speed = IO.readInt();
if (speed < 0){
     System.out.println("Speed cannot be negative. Try again.");
}else if (speed <=60){
     System.out.println("$0");
}else if (speed > 60 && speed <=75){
     System.out.println("$100");
}else if (speed > 75 && speed <=90){
     System.out.println("$500");
}

答案 2 :(得分:0)

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("Enter speed:");
    int speed = IO.readInt();
    if (speed < 0){
        System.out.println("Speed cannot be negative. Try again.");
        }
   else if (speed <=60){
        System.out.println("$0");
    }else if (speed > 60 && speed <=75){
        System.out.println("$100");
    }else if (speed > 75 && speed <=90){
        System.out.println("$500");
    }

}

答案 3 :(得分:0)

负数小于0.它的小于60.只需使用之后已使用的相同else if结构:

if (speed < 0){
    System.out.println("Speed cannot be negative. Try again.");
} else if (speed <=60){
    //...