You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用if语句实现车辆速度递减并维持在0值?

解决方案:实现无if语句的slowDown方法

首先分析你现有代码的问题:当speed为0时,speed / -1的结果是0,导致模运算(speed -1) % 0触发除零异常(ArithmeticException),这是你的实现报错的核心原因。

下面提供几种符合要求的实现方式,均不使用if语句,且能保证速度逐步降至0后维持,不会出现负值:

方法1:利用Integer.signum()函数

Integer.signum(speed)会根据speed的符号返回对应值:

  • 当speed > 0时返回1
  • 当speed = 0时返回0
  • 当speed < 0时返回-1

利用这个特性,slowDown方法可以写成:

public void slowDown() {
    speed = speed - Integer.signum(speed);
}

逻辑验证:

  • 当speed=5 → 5-1=4
  • 当speed=1 →1-1=0
  • 当speed=0 →0-0=0
  • 即使speed意外变为负数(如-1),也会自动调整为-1 - (-1)=0,避免负值。

方法2:利用Math.max()函数

通过Math.max直接取speed-1和0的较大值,确保不会出现负值:

public void slowDown() {
    speed = Math.max(speed - 1, 0);
}

逻辑验证:

  • 当speed>0时,每次减1,直到speed=0
  • 当speed=0时,0-1=-1,Math.max会返回0,维持速度为0

方法3:纯算术运算实现(模拟signum逻辑)

如果不想调用工具类方法,也可以用位运算模拟signum的效果,实现纯算术的无if逻辑:

public void slowDown() {
    // 用位运算计算符号:正数返回1,0返回0,负数返回-1
    int sign = (speed >> 31) ^ ((-speed) >> 31);
    speed = speed - sign;
}

这个实现和方法1逻辑完全一致,只是手动实现了signum的核心逻辑,适合需要纯底层运算的场景。

内容的提问来源于stack exchange,提问作者bara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:15:38