Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';当我尝试在类中实现泛型数据类型时,我遇到了一些错误_Java_Arrays - Fatal编程技术网

Java I';当我尝试在类中实现泛型数据类型时,我遇到了一些错误

Java I';当我尝试在类中实现泛型数据类型时,我遇到了一些错误,java,arrays,Java,Arrays,我一直在努力寻找,但我找不到我问题的答案。我觉得我已经正确地实现了我的泛型数据类型,但仍然会出错 我正在做一个练习,在那里我得到了构造函数/方法和变量(例如,我不能更改变量输入),现在我必须编写构造函数/方法来让它们工作。程序创建一个数组(对象),通过向数组中添加元素,数组可以增长,代码中每个方法上方的注释解释了它们的作用 当我尝试在我的两个构造函数中创建数组时,我得到了一个错误“变量必须提供维度表达式或数组初始值设定项”和“类型不匹配:无法从T[]转换为int” 在我的“add”方法中,我得到

我一直在努力寻找,但我找不到我问题的答案。我觉得我已经正确地实现了我的泛型数据类型,但仍然会出错

我正在做一个练习,在那里我得到了构造函数/方法和变量(例如,我不能更改变量输入),现在我必须编写构造函数/方法来让它们工作。程序创建一个数组(对象),通过向数组中添加元素,数组可以增长,代码中每个方法上方的注释解释了它们的作用

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

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

共同的主题似乎是我没有正确地实现泛型数据类型,但无论我尝试搜索多少次类似的问题,我都看不出我所做的有什么不同

在搜索时,我看到很多人说数组不能“增长”,而是使用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);
    }
}
import java.util.ArrayList;
导入java.util.array;
公共阶层成长阵列{
私有对象[]对象;
私有int指针;
//空数组
公共增长阵列(){
对象=新对象[];
}
//包含ds的数组
公共增长阵列(T[]ds){
对象=新对象[ds];
}   
//添加元素e并返回true
公共布尔加法(TE){
指针=0;
添加(指针++,e);
返回true;
}
//如果在数组中找到值d,则返回true
公共布尔包含(td){
对于(int i=0;i
“变量必须提供维度表达式或数组初始值设定项”

您需要传递一个大小。空括号无效

objects = new Object[someInitialSize];

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

要复制数组,请使用
数组。copyOf

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

@约翰·库格曼:我更新了更改,还注意到我犯了一个错误,写了
private T[]对象;
而不是
private Object[]对象;
。我现在也更新了错误消息,虽然略有不同,但似乎仍然在相同的位置。您发布的代码中没有一个问题。错误很多。例如,您似乎不知道如何实例化数组。在Java中,数组的大小是固定不变的;因此,必须通过分配新的、更大的数组来“增长”集合,然后将旧数组的内容复制到新数组中。此外,对
对象[]
数组调用
add
方法没有意义……对象数组没有add方法。
objects = new Object[ds];
objects = Arrays.copyOf(ds, ds.length);