无法执行数组的深层副本

时间:2017-05-06 20:20:06

标签: java arrays

在简介Java类中需要一些项目建议。我坚持创建一个赋值构造函数,它将数组作为输入并完成深度复制。有问题的构造函数位于第二个代码块中。

import java.util.Scanner;

public class NumberList
{
    public static final int MAX_CAPACITY = 100;

    private double [] numbers;  

    private int length;


    public NumberList()
    {
       numbers = new double[MAX_CAPACITY];
       int i;

       for(i = 0; i < MAX_CAPACITY; i++)
         numbers[i] = 0;

         length = 10;
    }

此行之前的所有内容都会编译。下面的构造函数是完成从数组参数到数字数组的深层复制。

    NumberList(final double a[])
    {
        double a[] = new double[MAX_CAPACITY];
        numbers = a[];
    }

收到错误后:

NumberList.java:67: error: '.class' expected
        numbers = a[];

对于我的生活,我无法弄清楚如何解决这个问题。我也尝试过“for”循环。

3 个答案:

答案 0 :(得分:1)

只需浏览a并将其元素复制到numbers

public NumberList(final double[] a) {
    this.numbers = new double[a.length];
    for (int i = 0; i < a.length; ++i) {
        this.numbers[i] = a[i];
    }
}

答案 1 :(得分:1)

NumberList(final double a[])
{
    double a[] = new double[MAX_CAPACITY];
    numbers = a[];
}

第一行是试图重新声明参数a;你不能这样做。

第二行使用了无效的语法:除了数组变量的声明或这些变量的初始化之外,你永远不会使用[]

复制a的最简单方法是写:

numbers = Arrays.copyOf(a, a.length);

但你可以用像Mureinik这样的循环来写这个。

请注意,您应该写double[] a,而不是double a[]。这两个在语义上是相同的,但前者是首选,因为[]是类型的一部分,而不是变量名。

double a[] - 样式已放入Java "as a nod to the tradition of C and C++"。您可以阅读更多here

答案 2 :(得分:1)

您可以简单地使用:

NumberList(final double[] a) {
    numbers = Arrays.copyOf(a, a.length);
}