簡體   English   中英

無法執行數組的深層副本

[英]Trouble performing a deep copy of array

需要一些關於簡介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”循環。

只需運行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];
    }
}
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 “作為對C和C ++傳統的點頭” 你可以在這里閱讀更多。

你可以簡單地使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM