Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果两辆车在任何一点相遇,请打印“是”或“否”?_Java - Fatal编程技术网

Java 如果两辆车在任何一点相遇,请打印“是”或“否”?

Java 如果两辆车在任何一点相遇,请打印“是”或“否”?,java,Java,这里x1和v1是car1的初始位置和速度,x2和v2是car2的初始位置和速度。我需要知道这两辆车是否在任何时候相遇。总是显示“否”时会出现错误。有什么建议吗 if (v1 > v2) { while ((x1 + (v1 * i)) > (x2 + (v2 * i))) { if ((x1 + (v1 * i)) == (x2 + (v2 * i))) { prime = true;

这里x1和v1是car1的初始位置和速度,x2和v2是car2的初始位置和速度。我需要知道这两辆车是否在任何时候相遇。总是显示“否”时会出现错误。有什么建议吗

    if (v1 > v2) {
        while ((x1 + (v1 * i)) > (x2 + (v2 * i))) {
            if ((x1 + (v1 * i)) == (x2 + (v2 * i))) {
                prime = true;
                break;
            }
            System.out.println(""+i);
            i++;
        }
        if (prime == true) {
            s = "Yes";
        } else {
            s = "No";
        }
    }
    if (v2 > v1) {
        while ((x2 + (v2 * i)) > (x1 + (v1 * i))) {
            if ((x1 + (v1 * i)) == (x2 + (v2 * i))) {
                prime = true;
                break;
            }
            System.out.println(""+i);
            i++;
        }
        if (prime == true) {
            s = "Yes";
        } else {
            s = "No";
        }
    }
    if (v1 == v2) {
        if (x1 == x2) {
            s = "Yes";
        } else s = "No";
    }
    System.out.println(""+s);

}

}这是一个数学问题,与其说是一个编程问题,不如说是一个数学问题。基本上你不需要任何循环和东西来回答它。我假设(因为没有其他含义)两辆车以相同的X方向行驶,速度为V,其中X和V都是正数

所以基本上你的逻辑是->如果速度快的车在速度慢的车后面,他们最终会相遇。否则他们不会。在这种情况下,不需要任何循环。下面示例中的最后一个检查是它们是否已经在同一位置

   if((x1<x2 && v1>v2) || (x1>x2 && v1<v2) || (x1==x2)) { 
        System.out.println("Yes");
    } else { 
       System.out.println("No");
    }

我认为你把问题复杂化了,通过你的迭代,你基本上找到了汽车相遇的时间步长,如果它们确实相遇的话

从一个方向考虑,这两辆车实际上只有五种可能性:

1) 第1辆车在第2辆车的前面,行驶速度比第2辆车快或与第2辆车相同=>车辆永远不会相遇

2) 第一辆车在第二辆车后面,行驶速度比第二辆车快=>两辆车相遇

3) 第一辆车在第二辆车前面,行驶速度比第二辆车慢=>两辆车相遇

4) 第1辆车在第2辆车后面,行驶速度比第2辆车慢或与第2辆车相同=>车辆永远不会相遇

5) 汽车已经相遇了

在代码中,这可能如下所示:

boolean carsMeet(x1,v1,x2,v2){
    boolean output = false;

    if(x1 > x2){
        // Conditions 1 and 3. Car 1 is ahead of car 2
        if (v2 > v1){
            // Condition 3
            output = true;
        }

    } else if (x1 < x2){
        // Conditions 2 and 4. Car 2 is ahead of car 1
        if (v1 > v2){
            // Condition 2
            output = true;
        }

    } else {
        // Condition 5. Car 1 has already met car 2
        output = true;
    }

return output;

}
布尔carsmet(x1,v1,x2,v2){
布尔输出=假;
如果(x1>x2){
//条件1和3。1号车在2号车前面
如果(v2>v1){
//条件3
输出=真;
}
}else if(x1v2){
//条件2
输出=真;
}
}否则{
//条件5.车辆1已经满足车辆2的要求
输出=真;
}
返回输出;
}

我还没有运行这段代码来检查语法错误,但一般来说,这是我建议解决问题的方法,而不是您当前的方法。

它们是线性的吗?就在X方向?你处理整数?只是为了澄清一下,它们是朝着同一个方向还是相反的方向运动?你想知道他们的位置是否相同,对吗?你的代码看起来比需要的复杂得多,所以你可以尝试再次检查你的数学,以确保你没有遗漏任何东西。我想它们不是朝着相反的方向走,就是在一个非整数
I
处相遇,所以等式永远不会成立。打印出他们在每一步的位置,你就会看到发生了什么。你只在单行道上开车吗?添加一些解释。
s = "No";
if (x1 == x2) {
   s = "Yes";
} else if (v1 == v2) {
   s = "No";
} else if ((x2-x1)/(v1-v2) > 0) {
   s = "Yes";
}
s = "No";
if (x1 == x2) {
   s = "Yes";
} else if (v1 == v2) {
   s = "No";
} else if ((x2-x1)/(v1-v2) > 0) {
   s = "Yes";
}