我的偶数方法没有返回偶数

时间:2016-10-10 17:31:29

标签: java arrays methods

此代码以不计算其平均值的方式打印数组(1,7,8,22,37,55,80)。

我想要的输出(8,22,80)。

我得到的输出(1,7,8,22,37,55,80)。

///The getEvens() method
public static int[] getEvens(int a[]) {

    int myEvens = 0;

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

    Arrays.sort(a);

    return a;
}

\\\\The main method
public static void main(String args[]) {

    int [] getEvens;
    int [] myArray = {1,8,80,22,55,37,7};
    int [] evenResult = getEvens(myArray);

    System.out.print("\nThe even numbers in the array(" +    Arrays.toString(myArray)+ ") are:{ " + Arrays.toString(evenResult)+ "}.");

}

5 个答案:

答案 0 :(得分:2)

其中一个问题是您没有从getEvens()方法返回任何内容,因此您的第二个toString将无法满足您的需求。您也增加myEvens,但此值用作计数器。您需要保存数组中的偶数值。

您可以轻松地使用ArrayList执行此操作:

//import ArrayList
import java.util.ArrayList;
//before method
List<Integer> evens = new ArrayList<Integer>();
//in the for-loop
evens.add(a[i]);

在ArrayLists here上查看更多信息。

如果要继续使用数组,可以创建一个长度为myEvens的新数组,再次运行原始循环,并将每个偶数值添加到新数组中。但是,为此,您需要一种方法来跟踪新阵列中的索引。

排序算法可在线获取。 array.sort()适用于数组值。排序的ArrayList实现被赋予here

答案 1 :(得分:0)

现在,你正在做的就是计算你阵列中的平均数,如果这就是你想要做的就好了。如果你真的希望将它们提取到自己的数组中,那就太复杂了,因为数组不是动态的。

你有两种选择,我更喜欢后者:

  1. 创建一个List<Integer>并将值存储在那里,然后将它们提取到一个数组中(如果您愿意的话):

    // Declare this list outside of the loop
    List<Integer> evens = new ArrayList<>();
    if(a[i] % 2 == 0) {
        evens.add(a[i]);
    }
    return evens.toArray(new int[0]);
    
  2. 使用Arrays.stream构建流并过滤掉仅包含偶数值的数组:

    // Just return this explicitly
    return Arrays.stream(a).filter(i -> i % 2 == 0)
                           .toArray();
    

答案 2 :(得分:0)

由于没有人提及它,这里是Java 8的简洁版本:

public static int[] getEvens(int a[]) {
    Arrays.stream(a).filter(i -> i % 2 == 0).toArray();
}

答案 3 :(得分:-2)

您实际上只是排序并返回传递给您的方法的相同数组。 在你的if语句中,你在计算&#34; myEvens&#34;你可以将[i]添加到一个新数组,然后返回一个而不是一个(这是输入参数)。

答案 4 :(得分:-2)

您的代码正在尝试计算数组中的平均数。     正如@jeff carey所说,你可以为他们创造新的阵列和均衡。     以下是您的代码段

   public static List<int> getEvens(int []  a) {

int myEvens = 0;
        int [] evenArray=new int[3];
        List<int> evenList=new List<int>();
        int length=a.Length;
        int index=0;

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

  if (a[i] % 2 == 0) {

     myEvens++;
     evenList.Add(a[i]);
  }    

}

 Array.Sort(a);

 return evenList;
}

希望这有帮助