gpt4 book ai didi

java - 在保持排序顺序的同时添加到 ArrayList 时出现问题

转载 作者:行者123 更新时间:2023-12-01 21:48:28 25 4
gpt4 key购买 nike

所以我在完成这项家庭作业时遇到了麻烦。本质上,我们必须创建继承 java.util.ArrayList 的类 SortedArrayList,并重写 ArrayList 的默认添加方法,以便我们可以维护一个从最低到最高的整数排序列表。

这是我的教授给全类测试我们的方法的代码:

package Asg3;

import java.util.ArrayList;

import myUtil.SortedArrayList;

public class Asg3 {



public static void testInteger() {
SortedArrayList<Integer> sorted= new SortedArrayList<Integer>();

for (int i=0;i<20;i++) {
sorted.add((int)(Math.random()*1000));
}
int bad=0;
for (int i=0;i<20;i++) {
try {
sorted.add((int)(Math.random()*1000)%sorted.size(),(int)(Math.random()*1000));
} catch (IllegalArgumentException e) {
System.out.print(".");
bad++;
}
}

System.out.println("\nsize: "+sorted.size()+" bad insertions: "+bad);
System.out.println(sorted.toString());
}



}

public static void main(String[] args) {

testInteger();



}

}

到目前为止,这是我重写 add 方法的方法,以便它们维护一个排序的数组列表。

package myUtil;

public class SortedArrayList<T extends Comparable<T>>extends java.util.ArrayList<T>
{
public SortedArrayList()
{

}

public SortedArrayList(int capacity)
{

}

@Override
public boolean add(T item)
{
int index=this.size()-1;

//checks to see if item is greater than or equivalent to the last element in the list
if(item.compareTo(this.get(index))>=0||this.get(index)==null)
{
//creates a new element at the end of the list and sets the value of item to it
this.set(index+1,item);

}
return true;
}



@Override
public void add(int i, T item)
{
//check to see if item is greater than the previous element, and less than the next element
if(item.compareTo(this.get(i-1))<0 && item.compareTo(this.get(i+1))>0)
this.set(i, item);
}

}

我收到一条错误消息:线程“main”中出现异常 ArrayIndexOutOfBoundsException: -1

在 myUtil.SortedArrayList.add(SortedArrayList.java:21)

SortedArrayList第21行是 boolean add方法中的if语句。

很抱歉发帖,如果这看起来是一个愚蠢的问题,但我的教授在过去两天的办公时间内没有出现,所以我真的没有其他地方可以寻求帮助。一如既往,感谢大家的提前回复。

最佳答案

问题是您从现有 ArrayList 中检索“上一个”和“下一个”元素进行比较,而不检查这些元素是否确实存在。要考虑的特殊情况是:列表为空;在第一个元素之前插入,或在最后一个元素之后添加。

一旦您尝试的插入通过了排序检查,您就可以使用 super.add(value)super.add(position, value) 进行实际操作。据我所知,任何时候都不需要使用 set() 方法。

(由于这是家庭作业,我不愿意提供(伪)代码,至少不给您机会自己思考特殊情况。)

关于java - 在保持排序顺序的同时添加到 ArrayList 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589198/

25 4 0