【问题标题】:Trouble performing a deep copy of array执行数组的深拷贝时遇到问题
【发布时间】:2017-05-06 20:20:05
【问题描述】:

需要一些关于 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;
    }

编译此行之前的所有内容。下面的构造函数是完成从数组参数到numbers数组的深拷贝。

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

收到以下错误:

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

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

【问题讨论】:

    标签: java arrays


    【解决方案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】:

      你可以简单地使用:

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

      【讨论】:

        【解决方案3】:

        只需运行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];
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-19
          • 2018-02-26
          • 2016-09-27
          • 1970-01-01
          • 2021-05-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多