ArrayList null不为空

问题描述

如果输入的ArrayList为空或ArrayList为null,则该方法应返回null。

我在为arrayList为null的部分找到可行的解决方案时遇到了麻烦。

我正在检查arrayList是否为空,但是我不知道如何检查arrayList是否为空。

我收到nullPointerExceptino错误,并收到一条错误消息,指出我在检查arraylist是否错误时返回null语句是无效代码

import java.util.ArrayList;

public class Excerice_1 {

    public static void main(String[] args) {
        ArrayList<Float> PA = new ArrayList<Float>();
    
        PA.add(null);

        
        
        System.out.println(PrefixAverage(PA));
        
    }

    public static ArrayList<Float> PrefixAverage(ArrayList<Float> X) {
        float sum = 0;
        
        ArrayList<Float> PrefixAverages = new ArrayList<Float>();
        
        if (X.isEmpty() )
            
            return null;
        else if (X == null)
            return null;
                
        else {
            for (int i = 0; i < X.size(); i++) {
                sum += X.get(i);
                PrefixAverages.add(sum / (i+1));
                
            }

        return PrefixAverages;
        }
        
            
    }

}

解决方法

首先,您的代码应在检查List的空条件之前处理空值。我在这里结合了两个条件,但是这里的顺序很重要。 即null == X || X.isEmpty()

第二次进行求和时,应检查列表中的项目是否为空,如果为空或您的实际值,则添加0

sum += null != X.get(i) ? X.get(i) : 0;

可行的解决方案是:

public class Excerice_1 {

    public static void main(String[] args) {
        ArrayList<Float> PA = new ArrayList<Float>();

        PA.add(null);



        System.out.println(PrefixAverage(PA));

    }

    public static ArrayList<Float> PrefixAverage(ArrayList<Float> X) {
        float sum = 0;

        ArrayList<Float> PrefixAverages = new ArrayList<Float>();

        if (null == X || X.isEmpty())
            return null;
        else {
            for (int i = 0; i < X.size(); i++) {
                sum += null != X.get(i) ? X.get(i) : 0;
                PrefixAverages.add(sum / (i+1));

            }

            return PrefixAverages;
        }


    }
}