java - 为什么我在这里得到不同的结果?

标签 java arrays boolean

我有下一个任务:给定一个整数数组,如果该数组不包含 1 和 3,则返回 true。

第一个版本是正确的:

for (int i = 0; i < nums.length; i++){
    if(nums[i] == 1 || nums[i] == 3)
        return false;
}
return true;

但是我有很多错误的测试:

for (int i = 0; i < nums.length; i++) {
    if (nums[i] != 1 || nums[i] != 3)
        return true;
}
return false;

你能解释一下为什么它会这样工作吗?我认为原因是第二个 if(...) 发生了一些事情

最佳答案

如果没有 1 且没有应该返回true > 3秒。

让我们看看您的第二个代码:

// Iterate all values
for (int i = 0; i < nums.length; i++) {
    // Return true if value is not 1 OR not 3
    if (nums[i] != 1 || nums[i] != 3)
        return true;
}

// Return false
return false;

这里的关键是条件 val != 1 || val != 3 这是一个同义反复,即在所有情况中它都是​​true。假设值为5,它不是1,因此返回true。现在假设值为 1,它是 1 但它不是 3,也是 true 返回。

您需要将 || 替换为 &&,这意味着 ,这也能更好地反射(reflect)您的文本条件:

return true if the array contains no 1's and no 3's

但是,如果您找到的第一个元素既不是 1 也不是 3,则不能直接返回 true。您首先需要检查所有元素。但是,如果找到第一个 13,则可以直接返回 false。这正是您的代码的第一个版本,它正确

<小时/>

请注意,当否定条件时,您还需要否定所有量词运算符

第一个代码使用此逻辑实现了一种方法:

  • 否(存在一个 13 元素)
  • Ø(∃ e : e = 1 ∨ e = 3)

现在解决否定时,您会收到以下逻辑:

  • 所有元素都不是 1 并且不是 3
  • ∀ e : e ≠ 1 ∧ e ≠ 3

因此,(存在)变为(对于所有),=()到 ()。

关于java - 为什么我在这里得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744402/

相关文章:

java - 有没有一种方法可以将数据从一个 servlet 传递到另一个 servlet,同时也将相同的数据传递到 jsp?

java - Android 的触摸次数翻倍?

java - 双向链表

javascript - 清除与索引分开的输入

java - JAXB 中的对象

python - 检查某些内容是否不在多个列表中 - 如何使其更优雅

javascript - 如何在javascript中过滤多个值(或运算)

javascript - JavaScript 中的 Boolean.valueOf 是什么

c - 通用C程序

Ada 中的 boolean 大小