【问题标题】:Java: How to create an array object with a constructor? [duplicate]Java:如何使用构造函数创建数组对象? [复制]
【发布时间】:2018-09-27 21:52:08
【问题描述】:

我可以使用帮助/指导来了解如何构建一个接收(例如 1、2、3)int 的构造函数并将它们存储到一个名为 arr2 的数组对象中。

第一部分:

public static void main (String[] args) {

Create an Arrays object using the first constructor
Arrays arr1 = new Arrays(5);


Arrays arr2 = new Arrays (1,2,3);
}

第二部分:

public class Arrays {

private int [] array;
private int count;

public Arrays(int[] arr){

    int[] array = arr;
    array= arr;
    count = arr.length;
}}

【问题讨论】:

  • 可能您正在寻找 var args 方法参数。
  • 这是一个有趣的问题:如果您将其称为int[] a = new int[] {1,2,3}; Arrays arr1 = new Arrays(a);,那么您想复制传入的数组参数。但是,如果您将其称为Arrays arr2 = new Arrays(1,2,3);,那么您就不想复制该数组,因为这会浪费 CPU 时间和内存,因为您可以将 reference 保存到数组中传递的参数目的。 C++ 已经允许通过右值引用进行这种优化,但 Java 不允许。即使您不需要,您也必须在每种情况下复制数组。
  • 您的局部变量int[] array 隐藏了也称为arrays成员变量。要改为访问成员变量,您必须使用 this 完全限定引用它:this.array = arr.

标签: java arrays constructor


【解决方案1】:

你可以这样做:

public class Arrays {

    private int [] array;

    public Arrays(int... arr){
        array = arr.clone();
    }

    public int get(int index) {
        return array[index];
    }
}

您的代码的更改:

  1. 构造函数使用可变参数(查找)。
  2. 无需存储计数;如果您想计数,请使用array.length()
  3. 数组已复制。这意味着您可以更改传入的原始数组,但 Arrays 对象中的值不会受到影响。
  4. 我添加了一个 getter 方法。

【讨论】:

    【解决方案2】:

    尝试将此构造函数与 var args 一起使用

    public Arrays(int... arr) {
    
        int[] array = arr;
        array= arr;
        count = arr.length;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2018-07-11
      • 2020-08-16
      相关资源
      最近更新 更多