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

判断两车是否相遇的代码始终输出No,求排查建议

代码问题排查与修复建议

嘿,我来帮你揪出这段代码总是输出"No"的问题哈!咱们一步步拆解:

核心问题分析

  • 循环条件完全搞反了:比如当v1 > v2时,只有当x1 < x2,car1才有可能追上car2。但你的循环条件是(x1 + v1*i) > (x2 + v2*i)——这意味着只有当car1已经跑到car2前面时才进入循环,这时候根本不可能在循环里找到相遇点,直接跳过循环输出"No"。
  • 变量未初始化:代码里的prime和i没看到初始化语句。如果i默认从0开始,那初始位置相等的情况(i=0)不会被v1≠v2的分支捕获,因为循环条件不满足,直接跳过。
  • 代码冗余且变量污染:v1>v2和v2>v1的分支逻辑几乎重复,而且如果第一个分支执行了i递增,第二个分支会用已经改变的i值,导致逻辑混乱。

更高效的修复思路

其实不用循环这么绕,用数学公式直接计算更准确高效!

两车相遇的核心条件是:存在非负的时间t(t≥0),使得 x1 + v1*t = x2 + v2*t。整理公式后分情况讨论:

  1. 如果v1 == v2:
    • 只有x1 == x2时,两车一直处于相遇状态 → 输出"Yes"
    • 否则,速度相同但初始位置不同,永远不会相遇 → 输出"No"
  2. 如果v1 != v2:
    • 计算t = (x2 - x1)/(v1 - v2)
    • 只要t ≥ 0,就说明两车会在未来(或当前)相遇;如果t < 0,说明相遇发生在过去,不算数。

修复后的代码示例

情况1:允许相遇在任意非负时刻(不需要整数时间步)

public class CarMeetingChecker {
    public static void main(String[] args) {
        // 这里可以替换成你需要测试的初始值
        int x1 = 0, v1 = 2;
        int x2 = 5, v2 = 1;
        String s;

        if (v1 == v2) {
            s = (x1 == x2) ? "Yes" : "No";
        } else {
            // 用double计算避免整数除法丢失精度
            double t = (double)(x2 - x1) / (v1 - v2);
            s = (t >= 0) ? "Yes" : "No";
        }

        System.out.println(s);
    }
}

情况2:要求必须在整数时刻相遇(比如i是整数时间步)

public class CarMeetingChecker {
    public static void main(String[] args) {
        // 替换成测试值
        int x1 = 0, v1 = 3;
        int x2 = 4, v2 = 1;
        String s = "No";

        if (v1 == v2) {
            s = (x1 == x2) ? "Yes" : "No";
        } else {
            int numerator = x2 - x1;
            int denominator = v1 - v2;
            // 检查是否能整除,且时间t非负
            if (numerator % denominator == 0) {
                int t = numerator / denominator;
                if (t >= 0) {
                    s = "Yes";
                }
            }
        }

        System.out.println(s);
    }
}

为什么原代码总是输出"No"

举个实际例子:假设x1=0, v1=2,x2=5, v2=1,这时候两车应该在t=5时相遇。但原代码的循环条件是x1 + v1*i > x2 + v2*i,初始i=0时,0+0=0 <5+0=5,不满足循环条件,直接跳过循环,prime还是默认的false,所以输出"No"——这就是问题根源!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:24:14