当我尝试为类实现通用数据类型时出现错误

时间:2018-12-05 18:07:07

标签: java arrays

我一直在尝试搜索,但是我找不到解决问题的答案。我觉得我已经正确实现了通用数据类型,但是仍然出现错误。

我正在做一个练习,向我提供了构造函数/方法和变量(因此,例如,我无法更改变量输入),现在我必须编写构造函数/方法以使它们起作用。该程序创建了一个数组(对象),该数组可以通过向其中添加元素来增长,并且代码中每个方法上方的注释都说明了它们的作用。

当我尝试在两个构造函数中创建数组时,出现错误“变量必须为空数组提供维表达式或数组初始值设定项”,并且出现“类型不匹配:无法从T []转换为int”的错误。

在我的“添加”方法中,我得到错误“无法在数组类型T []上调用add(int,T)”,最后在我的“ toArray”方法中,我得到了错误“类型不匹配:无法从对象转换[]到T []”。

一个共同的主题似乎是我没有正确实现通用数据类型,但是无论我尝试搜索类似问题多少次,我都看不出自己所做的事情有何不同。 / p>

搜索时,我看到很多人说数组不能“增长”,而只能使用ArrayList,但是必须有一种方法只能用数组来解决这个问题,否则您将无法解决这个问题

import java.util.ArrayList;
import java.util.Arrays;

public class GrowingArray<T> {
    private Object[] objects;
    private int pointer;

    //empty array
    public GrowingArray() {
        objects = new Object[];
    }

    //array that contains ds
    public GrowingArray(T[] ds) {
        objects = new Object[ds];
    }   

    // add element e and return true
    public boolean add(T e) {
        pointer = 0;
        objects.add(pointer++, e);
        return true;
    }

    // return true if value d is found in the array
    public boolean contains(T d) {
        for(int i = 0; i <= objects.length; i++) {
            if(objects[i] == d) {
            }
        }
        return true;
    }

    // return the element on index i
    public T get(int index) {
        int i = index;
        return objects[i];
    }

    // return first index containing d, if not found return -1
    public int indexOf(T d) {
        for(int i = 0; i <= objects.length; i++) {
              if(d == objects[i]) {
                  return i;
              }
          }
          return -1;
    }

    // return last index containing d, if not found return -1
    public int lastIndexOf(T d) {
        for(int i = objects.length; i >= 0; i--) {
              if(d == objects[i]) {
                  return i;
              }
          }
          return -1;
    }

    // return length of array
    public int size() {
        return objects.length;
    }

    // return a trimmed version of the array
    public T[] toArray() {
        return Arrays.copyOf(objects, objects.length);
    }
}

1 个答案:

答案 0 :(得分:1)

objects = new Object[];
     

“变量必须提供维表达式或数组初始化器”

您需要传递尺寸。空括号不起作用。

objects = new Object[someInitialSize];

objects = new Object[ds];
     

“类型不匹配:无法从T []转换为int”

要复制数组,请使用Arrays.copyOf

objects = Arrays.copyOf(ds, ds.length);