繁体   English   中英

将数组排序为偶数和奇数

[英]Sorting an array to even and odd numbers

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

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);
    }
}

我不知道原因?

这是因为您的even列表为空:您在classify创建了一个局部变量,该局部变量隐藏了静态字段。

只需删除:

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

从您的分类方法。

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

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);
    }
}

这些是您创建的具有本地引用的本地对象,当函数以您的实例成员的名义在您的分类方法中结束时,这些本地对象将被销毁

偶= new ArrayList();

奇=新的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]);
                 }
             }

您将需要删除:

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

同时从分类中删除所有参数。 所以现在看起来应该像这样:

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]);
    }
}

在通过尝试创建本地副本的过程中,不需要将静态参数传递给方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM