【问题标题】:Method filter even value in array and return them in a new array方法过滤数组中的偶数值并在新数组中返回它们
【发布时间】:2012-10-07 23:53:59
【问题描述】:

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

编写一个方法 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;  
}

【问题讨论】:

  • 第 1 步:一致地格式化您的代码并正确使用空格。 filArraydata的计数器会一样吗?它们的长度不同,并且在不同的索引处包含不同的项目。

标签: java arrays bluej


【解决方案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. 这里的情况相同,只是计算机正在试图找到房子。

【讨论】:

    【解决方案2】:

    您填写了错误的索引。

    你有

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

    data 单元格正确,filArray 单元格错误,改为

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

    其余的看起来还可以。虽然你应该看看ArrayList,因为它可以提高效率

    【讨论】:

    • 或者只做filArray[j++] = data[i]
    • 是的,但既然他说他是 java 新手,我想让它更简单一点。
    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2021-08-12
    • 2021-12-13
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多