【问题标题】:how to add two arrays together using a method如何使用方法将两个数组相加
【发布时间】:2018-04-10 07:40:58
【问题描述】:

我正在尝试一起添加到列表中。 (我知道我的班级名称不适合它,但无论如何)

我面临的问题是我有代码:

C[i] = v[i] + x[i];

它说表达式的类型必须是一个数组,但解析为一个变量......任何建议如何解决它并能够使用方法将两个数组添加在一起??

import java.util.Arrays;

public class reverse {

    int n;
    double [] arr;


    public reverse( int input){

        n =input;
        arr = new double[n];

    }


    public double[] get_array(){

        for (int i = 0; i < n; i ++)
        {
            arr[i] = i + 1;

        }

        return arr;
    } 




    public  reverse add(reverse v, reverse x){

        reverse C = new reverse(3);
                for( int i = 0; i < n; i++){

            C[i] = v[i] + x[i];
            System.out.println(C[i]);
        }
                return C;   
    }

    public static void main(String[] args){


            reverse A = new reverse(5);
            reverse B = new reverse(5);
            System.out.println( Arrays.toString(A.get_array()));
            System.out.println( Arrays.toString(B.get_array()));

        }
    }

【问题讨论】:

  • 根据 Java 约定,类名应该以大写开头。将您的课程命名为“反向”没有意义,实际上会让人感到困惑......当您在以下位置创建“答案”对象时:reverse C = new reverse(3); 您应该以与xv 相同的长度创建它 -所以你不应该随意将3 传递给构造函数。祝你好运!

标签: java arrays object methods sum


【解决方案1】:

要从vx 获取单个数组,请调用get_array()。此外,按照惯例,方法get_array() 应该是getArray(),而类reverse 应该是Reverse。要正确调整C 的大小,请获取vx 的长度并取max(如果您只想要出现在两侧的元素,则取min)。迭代并添加值,将结果存储在C 的数组中。类似的,

public reverse add(reverse v, reverse x) {
    reverse C = new reverse(Math.max(v.n, x.n));
    double[] vals = C.get_array(), left = v.get_array(), right = x.get_array();
    for (int i = 0; i < C.n; i++) {
        if (i < left.length && i < right.length) {
            vals[i] = left[i] + right[i];
        } else if (i < left.length) {
            vals[i] = left[i];
        } else {
            vals[i] = right[i];
        }
    }
    return C;
}

如前所述,如果您只想添加两侧都存在的元素,则可以简化代码。使用Math.min 获得正确的长度,您可以消除数组长度检查。喜欢,

public reverse add(reverse v, reverse x) {
    reverse C = new reverse(Math.min(v.n, x.n));
    double[] vals = C.get_array(), left = v.get_array(), right = x.get_array();
    for (int i = 0; i < C.n; i++) {
        vals[i] = left[i] + right[i];
    }
    return C;
}

【讨论】:

    【解决方案2】:

    问题是说reverse C;,你并没有创建一个数组,因此你不能使用C[i]。

    public  reverse add(reverse v, reverse x){
        reverse C = new reverse(3);
        for( int i = 0; i < n; i++){
            //Replace C with C.arr
            C.arr[i] = v[i] + x[i];
            System.out.println(C.arr[i]);
        }
        return C;   
    }
    

    这里C.arr指的是C中的arr字段

    同样按照约定,类型名称应该以大写字母开头

    【讨论】:

      【解决方案3】:

      C、v 和 x 是 Reverse 类型的对象,而不是数组。您需要访问对象中的数组。

      C.arr[i] = v.arr[i] + x.arr[i];
      System.out.println(C.arr[i]);
      

      此外,您不允许它们可能不是相同大小的数组这一事实。您可能需要允许这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 2021-07-15
        • 2017-02-26
        • 2018-04-15
        • 1970-01-01
        相关资源
        最近更新 更多