Javascript 这两种代码之间有什么区别

Javascript 这两种代码之间有什么区别,javascript,algorithm,Javascript,Algorithm,我刚刚解决了一个黑客等级问题。问题是: 以下解决方案已通过所有30项测试 function kangaroo(x1, v1, x2, v2) { var returnVal = "NO"; if (x2 > x1 && v2 > v1) { returnVal = "NO"; } else if ((x1 - x2) % (v2 - v1) === 0) { returnVal = "YES"; }

我刚刚解决了一个黑客等级问题。问题是:

以下解决方案已通过所有30项测试

function kangaroo(x1, v1, x2, v2) {
    var returnVal = "NO";
    if (x2 > x1 && v2 > v1) {
        returnVal = "NO";
    } else if ((x1 - x2) % (v2 - v1) === 0) {
        returnVal = "YES";
    }
    return returnVal;
}
但是在我像下面这样修改代码之后,它还没有通过2个测试

function kangaroo(x1, v1, x2, v2) {
    var returnVal = "NO";
    if ((x1 - x2) % (v2 - v1) === 0) {
        returnVal = "YES";
    }
    return returnVal;
}

returnVal的默认值为“否”。所以,我认为第一个if语句应该是不必要的。那么,为什么第二个代码没有通过两个测试呢?

第一个代码块中的第二个条件是elseif。仅当第一个if条件未通过时,它才会运行

您可以拥有与if条件和else if条件都匹配的输入。这将导致在第一种情况下输出为否(如果<代码>匹配,则输出为否;如果<代码>未运行,则输出为<代码>否则输出为否),但在修改的代码中输出为是(如果<代码>匹配,则输出为前一种<代码>否则输出)。

kangoroo(1,1,2,2)
因此,第一个代码将返回No,而第二个代码将返回Yes。您可以将第一个条件实施到第二个条件中:

function kangaroo(x1, v1, x2, v2){
  if ((x1 - x2) % (v2 - v1) === 0 && !(x2 > x1 && v2 > v1)) {
    return "YES";
  }
 return " No";
}
试试这个(用Java编写)

x1:袋鼠1的初始位置 &x2:袋鼠2的初始位置

如果给定x2>x1

static String kangaroo(int x1, int v1, int x2, int v2) {

    int i;
    for(i=0; x1<x2; i++){
        x1 = x1 + v1;
        x2 = x2 + v2;
        if(x1 == x2){
            return "YES";
        } 
    }   
    return "NO";
}
静态字符串袋鼠(intx1、intv1、intx2、intv2){
int i;
对于(i=0;x1x2或x1==x2或x1
static String kangaroo(int x1, int v1, int x2, int v2) {

    int i, flag = 0;

    if(x1 > x2){
        for(i=0; x1>x2; i++){
            x1 = x1 + v1;
            x2 = x2 + v2;
            if(x1 == x2){
                return "YES";
            }
        }
    }else if(x1 < x2){
        for(i=0; x1<x2; i++){
            x1 = x1 + v1;
            x2 = x2 + v2;
            if(x1 == x2){
                return "YES";
            } 
        }   
    }else
        return "YES";

    return "NO";
}
静态字符串袋鼠(intx1、intv1、intx2、intv2){
int i,flag=0;
如果(x1>x2){
对于(i=0;x1>x2;i++){
x1=x1+v1;
x2=x2+v2;
如果(x1==x2){
返回“是”;
}
}
}else if(x1对于(i=0;x1而言,最简单的解决方案是

if (v1 <= v2 && x2 > x1) {
    return "NO";
} else {
    return (x2 - x1) % (v2 - v1) == 0 ? "YES" : "NO";
}
if(v1-x1){
返回“否”;
}否则{
返回(x2-x1)%(v2-v1)==0?“是”:“否”;
}

否则如果……提示:
(x1-x2)%(v2-v1)==0
可能是真的,即使x2