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

时间:2016-09-21 00:12:34

标签: java arrays boolean

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;
}

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

only14([]) → true

从解决方案中,以下输入应该产生true,但我无法弄清楚原因:

{{1}}

我理解默认值是0,所以我错过了什么,以至于我应该期望布尔值的返回值为{{1}}?

3 个答案:

答案 0 :(得分:4)

以下内容应该有效。它返回true,除非有任何值不是1或4。

public boolean only14(int[] nums) {
  for (int i = 0; i < nums.length; i++) {
    int val = nums[i];
    if (val != 1 && val != 4) {
      return false;
    }
  }
  return true;
}

答案 1 :(得分:3)

空集不包含不是14的值,因此它应该是true。我更喜欢for-each loop喜欢

public boolean only14(int[] nums) {
    for (int n : nums) {        // for each int n in nums
        if (n == 1 || n == 4) { // if it is 1 or 4 keep looping
            continue;
        }
        return false;           // it isn't 1 or 4, return false
    }
    return true;                // every value is 1 or 4.
}

在Java 8+中,您可以使用IntStream之类的

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

答案 2 :(得分:0)

此代码可以正常工作:-

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;
}