gpt4 book ai didi

java - 在不使用Java的Arraylist的情况下为类创建动态数组,并且尚未获得正确的教学方法

转载 作者:行者123 更新时间:2023-11-30 07:46:24 25 4
gpt4 key购买 nike

因此,我正在与不擅长教我们做家庭作业的老师一起上Java课。

我们应该通过此分配创建一个带有构造函数,方法和所需功能的动态整数数组类。不允许使用ArrayLists我已经写了其中的一些,有几个没有用,我不知道如何做其他的。

要求如下:


私有int array []字段。您必须将数据内部存储在
规则的部分填充整数数组。请不要使用
数组列表。分配数组的大小是其容量,并且将
在下面讨论。
私有int大小字段。此变量存储的数量
数组中的“已占用”元素。在构造函数中设置为0。
带参数的构造函数。参数定义容量
初始数组。分配给定容量的数组,将size字段设置为
零。如果提供给构造函数的参数小于0,
抛出IllegalArgumentException。
无参数构造函数。分配大小为10的数组,设置大小字段
到0。
复制构造函数。构造函数采用类型的对象
将DynamibcArray作为参数并将其复制到对象中
创建。如果构造函数抛出IllegalArgumentException,则
从中传递来复制的对象为null。
int getSize()返回大小–数组中占用的元素数。
int [] toArray()访问器返回数组。确保你不
返回私有数组字段。而是为新的分配内存
数组,将您的数组字段复制到该新对象中,然后返回
新数组。
public void push(int num)在数组末尾添加一个新元素
并增加size字段。如果阵列已满,则需要
增加阵列的容量:
 一种。创建一个新数组,其大小等于原始数组的两倍。
 b。将所有元素从array字段复制到新数组。
 C。将新元素添加到新数组的末尾。 d。使用新数组作为数组字段。
public int pop()throws RuntimeException移除了
数组并返回它。减小大小字段。如果数组是
清空RuntimeException消息“ Array is empty”必须为
抛出。此时,检查阵列的容量。如果
容量是占用元素数量的4倍
(大小),是时候缩小数组了:

一种。创建一个新数组,其大小等于存储容量的一半。
    原来的一个。
 b。将所有元素从array字段复制到新数组。
 C。使用新数组作为数组字段。
int get(int index)抛出IndexOutOfBoundsException返回元素
 具有请求的索引的数组。如果提供的索引也太
 大或负数时,IndexOutOfBoundsException会与
 消息“非法索引”。
int indexOf(int key)返回第一次出现的索引
 给定的数字。找不到数字时返回-1。
void add(int index,int num)抛出IndexOutOfBoundsException添加
 一个新元素(作为参数num传递到)的位置
 索引参数指定的数组。如果索引大于
 数组的大小或小于0,IndexOutOfBoundsException为
 抛出。将元素添加到数组的中间时,
 您必须将所有元素移至右侧以腾出空间
 新的那一个。如果阵列已满,没有空间容纳新阵列
 元素,数组的大小必须加倍。请按照以下步骤
 在push()方法说明中列出来使容量增加一倍
 数组。
int remove(int index)抛出IndexOutOfBoundsException移除
 此数组中指定位置的元素。当。。。的时候
 元素从数组中间删除,所有元素
 必须移动以缩小由删除的元素创建的间隙。如果
 传递给方法的索引值大于或等于大小或
 小于0,必须抛出IndexOutOfBoundsException。在这
 点检查阵列的容量。如果容量是4倍
 大于占用的元素数(大小),是时候
 缩小数组。


这是到目前为止我所用方法的类。

/**
*
* @author Lisa Hergert
*/
public class DynamicArray {
private int array[];
private int size;

/*
* Constructor
* @param capacity - integer
* throws an IllegalArgumentExeception if capacity is less than 0
*/
public DynamicArray (int capacity) {
if (capacity < 0) {
throw new IllegalArgumentException("Size cannot be less than 0.");
}
}

/*
* no-arg constructor
*/
public DynamicArray () {
array = new int [10];
size = 0;
}

/*
* Copies the array to a new one
* @param - array [] - integer array
*/
public DynamicArray (int array[]) {
int arrayCopy [] = new int [array.length];
for (int i = 0; i < array.length; i++) {
arrayCopy[i] = array[i];
}
}

/*
* getSize returns the size.
* @return - size
*/
public int getSize () {
return size;
}

/*
* @param array[] - integer
* @return array
*/
public int [] toArray (int array[]) {
return array;
}

/*
* @param num - integer
*/
public void push (int num) {

}

/*
* @return pop - integer
*/
public int pop() throws RuntimeException {
return pop();
}

/*
* @param index - integer
*/
public int get(int index) throws IndexOutOfBoundsException {
if (index >= size || index < 0)
throw new IndexOutOfBoundsException("Illegal Index");
return array[index];
}

public int indexOf(int key) {
int index = 0;

return index;
}

public void add(int index, int num) throws IndexOutOfBoundsException {
if (index >= size || index < 0)
throw new IndexOutOfBoundsException("Illegal Index");
int oldValue = array[index];
array[index] = num;
return oldValue;
}

public int remove(int index) throws IndexOutOfBoundsException {

}
}


我正在寻求帮助或什至关于可以在哪里查找所需内容的建议。我要去校园的辅导实验室,看看他们是否可以帮助我理解老师未正确教授的内容,但是在此之前,我想自己尝试一点。

这是一些问题之一。

/*
* @return pop - integer
*/
public int pop() throws RuntimeException {
return pop();
}


我知道那是不对的。即使您不想给我看代码,也可以在我可以查找我需要做的网站上给我一个建议,对此的要求是#9。

谢谢您的帮助。我希望我能在没有帮助的情况下做到这一点,但这不是发生的事情,因此我必须使用外部资源。过去,该站点一直很有帮助。

最佳答案

这是一项很棒的编程作业,可以使学生清楚地了解ArrayList。正如您可能已经猜到的那样,您的讲师希望您实现自己的ArrayList,这是一种教授数据结构的绝妙方法。

从需求开始


带参数的构造函数:目的是您可以初始化特定长度的数组。但是,由于数组没有元素,因此将其大小保持为0

公共DynamicArray(int容量){
    如果(容量<0){
        抛出新的IllegalArgumentException(“大小不能小于0。”);
    }
    this.array = new int [capacity];
    this.size = 0
}
没有参数的构造方法:与以前类似,只是容量将被常量10代替。为了清晰起见,将常量指定为

公共静态最终int DEFAULT_CAPACITY = 10;


为了在推入或弹出过程中缩小/增加容量,请采用这种方式,如果您知道您的Cookie罐很快就会用完空间,您会怎么做。您将得到一个新的罐子。现在,您如何确定想要的罐子大小?好吧,如果您想变大,答案是两倍;如果想变小,答案是1/4。获取一个新的jar类似于创建一个新的整数数组对象。然后,将所有饼干从小罐子移到大罐子,然后丢弃罐子。同样,将每个项目从旧数组复制到新数组。



这个答案可能会很长,我知道如果我将源代码传递给您,那将是一种欺骗,但是据我了解,您真的很愿意看到它是如何完成的,因此您可以查找ArrayList的参考实现。 :http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/ArrayList.java

最初这可能会令人生畏,但是如果您仔细查看方法grow(),ensureCapacity(),indexOf(),clone(),add(),您将更好地了解如何在Java中实现它

关于java - 在不使用Java的Arraylist的情况下为类创建动态数组,并且尚未获得正确的教学方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50637602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com