gpt4 book ai didi

Java按顺序将数字插入数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:41 26 4
gpt4 key购买 nike

我的作业有问题。我对编码还很陌生,我很难弄清楚如何做到这一点。我的教授提供了用于在数组中添加和删除项目的代码,但他希望我们添加一个方法,将项目添加到数组的正确位置。这是提供的代码:

import java.util.*;

public class MyArrayList {
private Object[]buffer;
private int currentSize;

public MyArrayList(){
final int INITIAL_SIZE=10;
buffer = new Object[INITIAL_SIZE];
currentSize=0;
}

public int size() {
return currentSize;
}

private void checkBounds(int n){
if (n<0||n>= currentSize){
throw new IndexOutOfBoundsException();
}
}
public Object get (int pos){
checkBounds(pos);
return buffer[pos];
}
public Object remove(int pos){
checkBounds(pos);
Object removed = buffer[pos];
for (int i = pos+1; i < currentSize; i++){
buffer[i-1] = buffer[i];
}
currentSize--;
return removed;
}
public boolean add(int pos, Object newElement){
growBufferIfNecessary();
currentSize++;
checkBounds(pos);
for(int i = currentSize - 1; i > pos; i--){
buffer[i] = buffer [i-1];
}
buffer[pos] = newElement;
return true;
}
public boolean addLast(Object newElement){
growBufferIfNecessary();
currentSize++;
buffer[currentSize -1] = newElement;
return true;
}
private void growBufferIfNecessary(){
if (currentSize==buffer.length){
Object[] newBuffer = new Object[2*buffer.length];
for(int i=0; i<buffer.length; i++){
newBuffer[i] = buffer[i];
}
buffer = newBuffer;
}
}

}

这是我们的任务:

添加一个名为“public void insert(int n)”的方法,它将 n 添加到您的 MyArrayList 对象的正确位置,以保持排序顺序。使用您现有的 MyArrayList 类并进行必要的修改。这是一个测试用例:

MyArrayList list = new MyArrayLst();

列表.插入(5);插入(10);插入(8);插入(20);插入(6);

如果您现在打印列表,它应该打印为:

5

6

8

10

20

这就是我目前的主要方法:

 import java.util.*;

public class ArrayListHomework {
public static void main (String[]args){
MyArrayList list = new MyArrayList();

list.insert(5);
list.insert(10);
list.insert(8);
list.insert(20);
list.insert(6);
for (int i=0; i<list.size(); i++){

System.out.println(list.get(i));

}
}
}

我对如何启动这个插入方法感到非常迷茫。任何帮助,将不胜感激。谢谢。

最佳答案

遗憾且不可原谅的是,您的“教授”提供的代码在 add() 方法中存在错误,此处:

public boolean add(int pos, Object newElement){
growBufferIfNecessary();
currentSize++;
checkBounds(pos);
// rest of method

因为 checkBounds() 没有被首先调用,如果 pos 超出范围,currentSize 将递增(并且缓冲区不必要地增长), 将实例置于不一致/错误状态。

Coding 101: First, check parameters.

修复:

public boolean add(int pos, Object newElement){
checkBounds(pos);
growBufferIfNecessary();
currentSize++;
// rest of method

要回答您的问题,您必须实现所谓的 insertion sort。 .简而言之,这意味着使用循环遍历所有元素,并在遇到更大元素或到达元素末尾时插入新元素。

请注意,如果您的数组元素尚未排序,则调用 insert() 是没有意义的。要处理这种情况,您应该考虑在元素乱序时抛出 IllegalStateException(您可以在迭代时检查前一个元素是否不大于当前元素)。

关于Java按顺序将数字插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149899/

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