Java按顺序将数字插入数组

标签 java computer-science

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

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/

相关文章:

c - 什么时候应该使用静态内存分配,什么时候应该使用动态内存分配?

java - Egit 找不到私有(private) GitHub 存储库

machine-learning - Find-S 的缺点

java - 错误!线程 "AWT-EventQueue-0"java.lang.IllegalStateException : Not on FX application thread; currentThread = AWT-EventQueue-0 中的异常

java - 带有 Spring : WARNING: javax. ws.rs.NotFoundException 的最新 CXF

search - 如何计算查询的 TF-IDF?

algorithm - 什么是 McNaughton-Yamada 算法?

computer-science - 重大项目建议

Java - 确定操作系统位版本

java - 根据 XSD 验证 XML