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