首页 文章

将数组排序为偶数和奇数

提问于
浏览
0

我编写了一个程序,使用 ArrayList 类将数组排序为奇数和偶数,但是当我尝试通过 display 方法显示两个 ArrayLists 时,没有输出 . note:- 当我尝试在分类方法中显示它们时一切顺利 . 我的 class ..

import java.util.*;
public class SortNumbers{
    private static int[] array = {8,78,20,3,27,30,45,25,14};
    private static List<Integer> even = new ArrayList<>();
    private static List<Integer> odd = new ArrayList<>();

    public static void classify(int[] arr, List even , List odd){
        even = new ArrayList<Integer>();
        odd = new ArrayList<Integer>();
        for(int i = 0 ; i < arr.length ; i++){
            if(arr[i] % 2 == 0)
                even.add(arr[i]);

            else
                odd.add(arr[i]);
        }
    }

    public static void display(List<Integer> list){
        for(Integer i : list)
            System.out.println(i);
    }

    public static void main(String[] args){
        classify(array,even,odd);
        display(even);
    }
}

我无法弄清楚原因??

4 回答

  • 1

    您不需要传递数组或重新初始化它们:

    import java.util.*;
    public class SortNumbers{
        private static int[] array = {8,78,20,3,27,30,45,25,14};
        private static List<Integer> even = new ArrayList<>();
        private static List<Integer> odd = new ArrayList<>();
    
        public static void classify(){
            for(int i = 0 ; i < array.length ; i++){
                if(array[i] % 2 == 0)
                    even.add(array[i]);
    
                else
                    odd.add(array[i]);
            }
        }
    
        public static void display(List<Integer> list){
            for(Integer i : list)
                System.out.println(i);
        }
    
        public static void main(String[] args){
            classify();
            display(even);
        }
    }
    
  • 2

    这是因为你的 even 列表是空的:你在 classify 中创建一个隐藏静态字段的局部变量 .

    只需删除:

    even = new ArrayList<Integer>();
    odd = new ArrayList<Integer>();
    

    来自你的分类方法 .

  • 1

    这些是创建了本地引用的本地对象,当函数在与类实例成员同名的classify方法中结束时,它们将被销毁

    even = new ArrayList();

    odd = new ArrayList();

    public static void classify(int[] arr, List even , List odd){
                    // even = new ArrayList<Integer>();  local reference created with same name as instance member
                    // odd = new ArrayList<Integer>();  local reference created with same name as instance member
                     for(int i = 0 ; i < arr.length ; i++){
                         if(arr[i] % 2 == 0)
                             even.add(arr[i]);
    
                         else
                             odd.add(arr[i]);
                     }
                 }
    
  • 2

    您需要删除:

    even = new ArrayList<Integer>();
    odd = new ArrayList<Integer>();
    

    and

    同时从分类中删除所有参数 . 所以它现在应该是这样的:

    public static void classify(){
    
        for(int i = 0 ; i < arr.length ; i++){
            if(arr[i] % 2 == 0)
                even.add(arr[i]);
    
            else
                odd.add(arr[i]);
        }
    }
    

    通过尝试执行此操作创建本地副本时,不需要将静态参数传递给方法 .

相关问题