有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java数组:添加多个数组的元素时忽略空数组

我有5个相同长度的浮点数组。在任何给定时间:所有、无或某些数组可能为null(未初始化)

我正在尝试创建一个函数,该函数将数组的值相加,并生成一个最终的数组,该数组中的值加在一起

有没有办法只包含填充数组中的值

谢谢, m


共 (5) 个答案

  1. # 1 楼答案

    首先,数组对象有长度,但是数组引用没有长度。只有引用可以为null(这意味着它不引用任何对象)。因此,您最初的问题描述有点错误

    但在任何情况下,都可以轻松检查数组引用是否为null:

    if (theArray != null) {
        // add in contribution from theArray
        ...
    
  2. # 2 楼答案

    public float[] addUp(float[][] yourArrays) {
        if(yourArrays == null)
            return null;
    
        int i, j;
        int arrayLength = 0;
        float[] toReturn = null;
    
        //get the length of the array that will be returned
        for(i = 0; i < yourArrays.length; i++) {
            if((yourArrays[i] != null) && yourArrays[i].length > arrayLength)
                arrayLength = yourArrays[i].length;
        }
    
        //now build the array that will be returned, but only if there
        //have been any values at all
        if(arrayLength != 0) {
    
            //create the array
            toReturn = new float[arrayLength];
    
            //fill it
            for(i = 0; i < yourArrays.length; i++) {
                for(j = 0; j < arrayLength; j++) {
                    if((yourArrays[i] != null)
                            && (j < yourArrays[i].length)
                        toReturn[j] += yourArrays[i][j];
                }
            }
        }
    
        return toReturn;
    }
    

    这应该是你想要的;它仅从已初始化的数组中选择值,直到每个数组的最后一个元素为止(因此您将不会有ArrayOutOfBoundsException),并且仅当存在任何值时才选择

    运行时为O([最长数组的长度]*[数组数])

    如果没有初始化任何数组,或者如果初始化的最长数组的长度为0,则返回值为

    • null
    • 一个float[]在每个单元格中保存初始数组中设置的所有值的总和
  3. # 3 楼答案

    你得检查一下。比如:

    /**
     * Assumes that all rows are the same length as the first row.
     */
    public float[] addValues(float[][] values){
        float[] result = new float[values[0].length];
        for(float[] row : values){
            if(row != null){
                for(int i = 0; i < row.length; i++){
                    result[i] += row[i];
                }
            }
        }
        return result;
    }
    
  4. # 4 楼答案

    是的,您可以通过所有数组的总和大小创建最终数组 然后为每个数组启动一个for 然后,如果该值不为null,则将其添加到最终值

    String[] a = new String[5];
            String[] b = new String[5];
            String[] c = new String[5];
            String[] d = new String[5];
            String[] e = new String[5];
    
            String[] finalarray = new String[a.length + b.length + c.length + d.length + e.length];
    
            int count = 0;
            for (int i = 0; i < a.length; i++) {
                if(a[i] != null){
                    finalarray[count] = a[i];
                    count++;
                }
            }
            for (int i = 0; i < b.length; i++) {
                if(b[i] != null){
                    finalarray[count] = b[i];
                    count++;
                }
            }
            for (int i = 0; i < c.length; i++) {
                if(c[i] != null){
                    finalarray[count] = c[i];
                    count++;
                }
            }
            for (int i = 0; i < d.length; i++) {
                if(d[i] != null){
                    finalarray[count] = d[i];
                    count++;
                }
            }
            for (int i = 0; i < e.length; i++) {
                if(e[i] != null){
                    finalarray[count] = e[i];
                    count++;
                }
            }
    
  5. # 5 楼答案

    你会用浮子吗

    List<Float> newArr = new ArrayList<Float>();
    for (float[] arr : arrays) 
    {
      if (arrf != null)
      {
        for (float number : arr) { newArr.add(number); }
      }
    }
    newArr.toArray(new Float[0]);