这里x1和v1是car1的初始位置和速度,以及car2的x2和v2。我需要找出这两辆车是否在任何地方相遇。它让我显示错误" No"总是。有什么建议吗?
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);
}
}
答案 0 :(得分:4)
这是一个数学问题而不是编程问题。基本上你不需要任何循环和东西来回答它。我假设(因为没有其他含义)两辆车在速度为V的同一X方向上,其中X和V都是正数。
所以基本上你的逻辑可以是 - >如果速度较快的汽车落后于较慢的汽车,他们最终会遇到。否则他们不会。在这种情况下,您将不需要任何循环。以下示例中的最后一项检查是它们是否已在同一位置。
if((x1<x2 && v1>v2) || (x1>x2 && v1<v2) || (x1==x2)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
如果V可以是负数(例如显示向后移动,这有点奇怪,因为速度不能为负),那么它仍然是相同的。只有当你想知道它们遇到的向量X上的点时,你才可以进行循环。但是通过一些计算,您仍然可以在没有循环的情况下进例如:
int vDiff=Math.abs(v1-v2);
int xDiff=Math.abs(x1-x2);
System.out.println("Meeting point: "+(((double)xDiff)/((double)vDiff)*v1+x1));
答案 1 :(得分:0)
我认为你的问题很复杂,你的迭代你基本上找到了汽车相遇的时间步,如果他们相遇的话。
当从一个方向考虑时,这两辆车实际上只有五种可能性:
1)轿厢1位于轿厢2的前方,并且比轿厢2的移动速度快于或高于轿厢2 =>汽车永远不会见面
2)汽车1在汽车2后面,并且比汽车2移动得更快=&gt;汽车见面
3)轿厢1位于轿厢2的前方,并且比轿厢2的移动慢=>汽车见面
4)轿厢1在轿厢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;
}
我没有运行此代码来检查它是否存在语法错误,但总的来说,这是我建议解决问题的方法,而不是您当前的方法。
答案 2 :(得分:0)
s = "No";
if (x1 == x2) {
s = "Yes";
} else if (v1 == v2) {
s = "No";
} else if ((x2-x1)/(v1-v2) > 0) {
s = "Yes";
}