编码bat ap考试练习

时间:2017-04-27 02:41:21

标签: java arrays

给定一组正整数,返回一个长度为“count”的新数组,其中包含原始数组中的第一个偶数。原始数组至少包含“count”偶数。

copyEvens([3, 2, 4, 5, 8], 2) → [2, 4]
copyEvens([3, 2, 4, 5, 8], 3) → [2, 4, 8]
copyEvens([6, 1, 2, 4, 5, 8], 3) → [6, 2, 4]

我的解决方案

public int[] copyEvens(int[] nums, int count) {
 int [] a= new int[count];
 int w=0;
 for (int i= 0; i<nums.length ; i++)
 {
  if(nums[i]%2==0)
a[w]=nums[i];
w++;
}
  return a;
 }

你能解释一下为什么它不起作用吗?

2 个答案:

答案 0 :(得分:1)

您在if(nums[i]%2==0)和下一个两个语句周围没有大括号。因此if仅适用于第一个,并且您将w增加太多次。添加大括号。

if (nums[i] % 2 == 0) {
    a[w] = nums[i]; 
    w++;
}

使用一个复合语句(但我更喜欢第一个解决方案)

if (nums[i] % 2 == 0)
    a[w++] = nums[i]; 

答案 1 :(得分:0)

如先前解决方案中所述,您将“ w”增加的次数比新阵列中的可用空间更多。要解决该错误,一旦新数组填充完毕,您需要一条语句来停止递增。 w < count将检查您的阵列是否还有足够的空间。

if (w < count && nums[i]%2 == 0) {
    a[w] = nums[i];
    w++;
}