【问题标题】:Why doesn't && in one if state work with this problem?如果 state 不能解决这个问题,为什么 && in one?
【发布时间】:2021-07-28 08:31:50
【问题描述】:

我首先尝试使用一个 if 语句编写此代码,因为我认为这是有道理的,因为索引必须是偶数并且元素必须是偶数并且与奇数和索引相同,但是它不起作用。此代码不起作用:

1.    function isSpecialArray(arr) {
   //iterate through array
 for(var i = 0; i < arr.length; i++){
   if((i % 2 === 0 && arr[i] % 2 !== 0) && (i % 2 === 1 && arr[i] % 2 !== 1)){
     return false;
   }
  }
  return true;
   
}

console.log(isSpecialArray([2, 7, 4, 9, 6, 1, 6, 3]));

但是,使用此代码:

2.    

function isSpecialArray(arr) {
//iterate through array
for(var i = 0; i < arr.length; i++){
 // console.log(arr[i] % 2 === 0 && i % 2 !== 0);
  if(i % 2 === 0 ){
    if(arr[i] % 2 !== 0){
      return false
    }
  }
  
  if(i % 2 == 1){
    if(arr[i] % 2 !== 1){
      return false;
     }
   }
    
   }
  
   return true;
   }

【问题讨论】:

  • i % 2 === 0...很多&amp;&amp;...i % 2 === 1 - 你认为这些可以同时成立吗?
  • 您的代码显示“如果将i 除以 2 的余数为零 ... 并且 ... 将 i 除以 2 的余数为零“,这两件事都不可能是真的。想想“和”这个词是什么意思。

标签: javascript arrays conditional-statements operators


【解决方案1】:
1.    function isSpecialArray(arr) {
   //iterate through array
 for(var i = 0; i < arr.length; i++){
// the error was that you shouldve aded an OR between the two statements not an AND
   if((i % 2 === 0 && arr[i] % 2 !== 0) || (i % 2 === 1 && arr[i] % 2 !== 1)){
     return false;
   }
  }
  return true;
   
}

console.log(isSpecialArray([2, 7, 4, 9, 6, 1, 6, 3]));

【讨论】:

    【解决方案2】:

    您的第一个代码执行的逻辑与您的第二个代码不同。拼出你的第二个:

    function isSpecialArray(arr) {
        //iterate through array
        for (var i = 0; i < arr.length; i++) {
            // first section
            if (i % 2 === 0) {
                if (arr[i] % 2 !== 0) {
                    return false
                }
            }
            // second section
            if (i % 2 == 1) {
                if (arr[i] % 2 !== 1) {
                    return false;
                }
            }
    
        }
        return true;
    }
    

    每次迭代:

    • 在第一部分,您检查索引和元素是否是偶数。如果是这样,则返回 false。否则,您检查:
    • 在第二部分中,您检查索引和元素是否为奇数。如果是,则返回 false。

    那里本质上是 OR 逻辑。所以你应该把||放在你的第一个代码中,而不是&amp;&amp;

    if((i % 2 === 0 && arr[i] % 2 !== 0) && (i % 2 === 1 && arr[i] % 2 !== 1)){
    

    应该是

    if((i % 2 === 0 && arr[i] % 2 !== 0) || (i % 2 === 1 && arr[i] % 2 !== 1)){
    //                                   ^^
    

    您现有的第一个代码检查索引是否为偶数该值是否为奇数该索引为奇数该值甚至有 - 这永远不会是真的。

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2019-08-28
      • 2013-09-07
      • 2011-01-16
      相关资源
      最近更新 更多