Java 空数组返回true?给定一个整数数组,如果每个元素都是1或4,则返回true

Java 空数组返回true?给定一个整数数组,如果每个元素都是1或4,则返回true,java,arrays,boolean,Java,Arrays,Boolean,我提出了以下算法,它返回所有预期的答案,除了一个空数组,该数组应该返回true: Given an array of ints, return true if every element is a 1 or a 4. only14([1, 4, 1, 4]) → true only14([1, 4, 2, 4]) → false only14([1, 1]) → true public boolean only 14(int[]nums){ 布尔标志=假; 对于(int i=0;i

我提出了以下算法,它返回所有预期的答案,除了一个空数组,该数组应该返回
true

Given an array of ints, return true if every element is a 1 or a 4.

only14([1, 4, 1, 4]) → true
only14([1, 4, 2, 4]) → false
only14([1, 1]) → true
public boolean only 14(int[]nums){
布尔标志=假;
对于(int i=0;i
从解决方案来看,以下输入应该会产生
true
,但我不明白为什么:

仅14([])→ 正确


我知道默认值是0,所以我缺少什么,因此我应该期望布尔值的返回值是
true

以下应该可以使用。它返回
true
,除非有任何值不是1或4

public boolean only14(int[] nums) {

  boolean flag = false;

  for (int i = 0; i < nums.length; i++) {

    if (nums[i] == 1 || nums[i] == 4) {
      flag = true;
    } else {
      return false;
    }
  }
  return flag;
}
public boolean only 14(int[]nums){
对于(int i=0;i
以下各项应能起作用。它返回
true
,除非有任何值不是1或4

public boolean only14(int[] nums) {

  boolean flag = false;

  for (int i = 0; i < nums.length; i++) {

    if (nums[i] == 1 || nums[i] == 4) {
      flag = true;
    } else {
      return false;
    }
  }
  return flag;
}
public boolean only 14(int[]nums){
对于(int i=0;i
空集不包含不
1
4
,因此它应该是
true
。我想要一个像这样的

在Java8+中,您可以使用类似的


空集不包含不是
1
4
的值,因此它应该是
true
。我想要一个像这样的

在Java8+中,您可以使用类似的

此代码工作正常:-

public boolean only14(int[] nums) {
    return IntStream.of(nums).allMatch(x -> x == 1 || x == 4);
}
public boolean only 14(int[]nums){
对于(int i=0;i此代码工作正常:-

public boolean only14(int[] nums) {
    return IntStream.of(nums).allMatch(x -> x == 1 || x == 4);
}
public boolean only 14(int[]nums){

对于(int i=0;iGet去掉
标志
,只在末尾返回
。因为空集不包含非1或4的数字。我知道您不是在问如何编写空集返回真的代码。相反,您是在问为什么空集返回真。如果是这样,请回答se阅读了这篇关于material conditional operator的文章。第一段就足够了。@Haozhun完全正确,谢谢你的链接。这是我知识上的一个相当令人尴尬的缺口,我很高兴你发现了!去掉
标志
,在结尾返回
。因为空集不包含数字这不是1或4。我知道你不是在问如何编写空集返回true的代码。相反,你是在问为什么空集返回true。如果是这样的话,请阅读这篇关于material条件运算符的文章。第一段就足够了。@Haozhun完全正确,谢谢你的链接。这是我知识中的一个相当尴尬的缺口,我很高兴你发现了!一个更简单、更优雅的算法。而且,现在对我的解释更清楚了。我误解了说明-我认为它是在寻找必须包含1或4的数组,而不是不包含1或4的数组包含可选值。一个有趣的差异(至少对我来说)。如果(n!=1&&n!=4),您是否坚持使用正条件而不是
if(n!=1&&n!=4)return false;
?@shmosel作为cybersam答案的替代。两者都在这里工作。我个人认为这样更可读。一个更简单、更优雅的算法。而且,现在对我的解释更清楚了。我误解了说明-我以为它在寻找必须包含1或4的数组,而不是一个数组n数组中不包含替代值。这是一个有趣的区别(至少对我来说)。如果(n!=1&&n!=4)返回false;
?@shmosel作为cybersam的答案的替代,那么您是否坚持使用正条件而不是
。这两种方法都适用于此。我个人认为这样更具可读性。
public boolean only14(int[] nums) {
  for(int i=0;i<=nums.length-1;i++){
     if (nums[i]!= 1 && nums[i]!= 4){
      return false;
    }
  }
  return true;
}