【问题标题】:Method that creates new array only from the even numbers in Java仅从 Java 中的偶数创建新数组的方法
【发布时间】:2018-02-15 20:37:40
【问题描述】:

我正在尝试创建仅从另一个数组的偶数创建新数组的方法。但是,我不明白为什么我的输出数组的长度正确(只有偶数个数),但我有 0 而不是实际数字。

我知道问题很简单,但现在我被困住了。

  import java.util.*;
    public class test{
    public static int [] myMethod(int []arr){
        int [] temp;
        int howManyEven = 0;
        for(int i=0;i<arr.length;i++){
            if(arr[i]%2==0){
                howManyEven++;
            }
        }
        temp = new int [howManyEven];
        int evenNum = 0;
        for(int i=0;i<temp.length;i++){
        boolean even = false;

            for(int j=0;j<arr.length;j++){
                if(arr[j]%2==0){
                    even = true;
                    evenNum = arr[j];
                }
               }
            if(!even){
                temp[i]=evenNum;
               }

        }
        return temp;
    }
    public static void main (String[]args){
        int [] myArray = {5,5,8,9,7,4,4,2,3};
        System.out.println(Arrays.toString(myMethod(myArray)));

    }
}

【问题讨论】:

  • 有一个工具叫做调试器来解决这些问题

标签: java arrays numbers


【解决方案1】:

在您的myMethod 的第二部分,其中有嵌套的 for 循环,您的外循环应该遍历arr。可以简化为下面

    temp = new int [howManyEven];
    int j = 0;
    for(int i=0;i<arr.length;i++){
        if(arr[i]%2 == 0) {
            temp[j++] = arr[i];
        }
    }

你可以更好地使用 java 集合并在单个循环中完成工作

public static Integer[] myMethod(int []arr){ //notice the return type is Integer[] instead of int[]
    List<Integer> evens = new ArrayList<Integer>();
    for(int a : arr) {
        if(a%2 == 0) {
            evens.add(a);
        }
    }
    return evens.toArray(new Integer[evens.size()]);
}

【讨论】:

    【解决方案2】:

    再看看这个:

        if(!even){
            temp[i]=evenNum;
        }
    

    我想你会注意到自己出了什么问题。

    【讨论】:

    • 是的,我现在明白了,甚至没有输入这个 if 语句。谢谢! :)
    【解决方案3】:

    您可以创建一个“偶数”整数列表并返回它,或者转换为原始 int[] 并返回它,而不是两次处理偶数的信息。

    public static int[] myMethod(int[] arr) {
    
        List<Integer> even = new ArrayList<Integer>();
    
        for (int i = 0; i < arr.length; i++) {
    
            if(arr[i]%2==0){
                even.add(arr[i]);
            }
    
    
        }
        int []result = new int[even.toArray().length];
        Iterator it = even.iterator();
    
        int count=0;
        while(it.hasNext()){
            result[count++]=(int)it.next();
        }
        return result;
    
    }
    
    public static void main(String[] args) {
        int[] myArray = {5, 5, 8, 9, 7, 4, 4, 2, 3};
        System.out.println(Arrays.toString(myMethod(myArray)));
    
    }
    

    输出

    run:
    [8, 4, 4, 2]
    BUILD SUCCESSFUL (total time: 0 seconds)
    

    【讨论】:

      【解决方案4】:

      最简单的方法是myMethod 应该创建一个临时列表,该列表从输入数组中收集偶数,然后将其转换为仅包含偶数元素的输出数组,该数组应返回给调用者

      工作示例

       public static void main(String... str) {
              // results array has only even numbers
              Integer[] results = myMethod(new int[]{5, 5, 8, 9, 7, 4, 4, 2, 3});
              for(int i=0;i<results.length;i++)
                  System.out.println(results[i]); // print each even number    
          }
      
          static Integer[] myMethod(int[] inputArray) {
              List<Integer> temp = new ArrayList<Integer>();
              for (int i = 0; i < inputArray.length; i++) {
                  if (inputArray[i] % 2 == 0) {
                      temp.add(inputArray[i]);
                  }
              }
              return temp.toArray(new Integer[5]);
          }
      

      希望这段代码能很好地澄清你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 1970-01-01
        • 2019-10-28
        相关资源
        最近更新 更多