2017-05-06 72 views
1

需要一些介绍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; 
    } 

此行编译之前的所有内容。下面的构造函数将完成从array参数到numbers数组的深层副本。收到

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

以下错误:

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

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

回答

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[]-style被放入Java "as a nod to the tradition of C and C++"。你可以阅读更多here

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

您可以简单地使用:

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