0

谁能告诉我如何更正以下代码以正常工作?

编写一个方法 filterEvens ,它接受一个整数数组并返回一个只包含偶数值的新数组。

仅包含偶数值的新数组。例如:

int[] data = {1, 3, 4, 2, 0, 5, -2};
int[] evens = filterEvens(data);

public static int[] filterEvent(int[] data) {
    int countLength = 0;

    for (int i = 0; i < data.length; i++) {
        if (data[i] % 2 == 0) {
            countLength++; 
        }
    }

    int[] filArray = new int[countLength]; 
    for (int i = 0; i < data.length; i++) {
        if (data[i] % 2 == 0) {
            filArray[i] = data[i]; 
        }
    }

    return filArray;  
}
4

2 回答 2

1

你填写了错误的索引。

你有

if(data[i]%2==0)
{
  filArray[i]= data[i] ; 
}

这对于数据单元格是正确的,但 filArray 的单元格是错误的,将其更改为

 int j = 0; 
 for (int i =0; i< data.length;i++)
  {
    if(data[i]%2==0)
    {
      filArray[j]= data[i] ;
      j++; 
    }
  }

其余的看起来还可以。尽管您应该看一下,ArrayList因为它可以使这更有效

于 2012-10-07T23:59:12.707 回答
1

这里的问题是:

for (int i =0; i< data.length;i++)
  {
    if(data[i]%2==0)
    {
      filArray[i]= data[i] ; 
    }
}

您正在从值 0-> data.length 循环。这是一个问题,因为数组 filArray[i] 的长度较小。

想象一下,你正在寻找某人的房子。在他们给你的街道上,假设 Emerald Dr. 门牌号可以从 2000 到 3000。然后你被告知他们住在 4000 Emerald Dr. 这里同样的情况,除了计算机正在试图找到房子。

于 2012-10-08T00:00:38.607 回答