我一直在使用此计算机分配时遇到问题。基本上我们必须编辑ArrayList的两个add方法,这样它才能让我们存储从最高到最低的整数。
以下是我的教授为测试我们的添加方法而提供的代码:
package Asg3;
import java.util.ArrayList;
import myUtil.SortedArrayList;
/**
* Don't modify any of the following codes.
*
* 2/14/2016
*
* @author Chung-Chih Li
*/
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();
}
}
以下是我的两个添加方法:
package myUtil;
public class SortedArrayList<T extends Comparable<T>>extends java.util.ArrayList<T>
{
public SortedArrayList()
{
super();
}
public SortedArrayList(int capacity)
{
super();
}
@Override
public boolean add(T item)
{
if(this.size()!=0)
{
int index=this.size()-1;
//tests to see if item is greater than the last index and if so places it there
if(item.compareTo(this.get(index))>=0)
{
super.add(item);
}
else
{//tests to see at what index other than the last index, would be appropriate to place the item in.
for(int i=1; i<this.size()-1;i++)
{
if(item.compareTo(this.get(i-1))<=0 && item.compareTo(this.get(i+1))>=0)
{super.add(i,item);
return true;}
else
continue;
}//fix add method
}
}
else
{super.add(0, item);}
return true;
}
@Override//fix add method
public void add(int i, T item)
{
if(i==0)
{
if(item.compareTo(this.get(i))==0&&item.compareTo(this.get(i+1))>0)
{
super.add(i,item);
}
}
else
{
try{
if(item.compareTo(this.get(i-1))<0 && item.compareTo(this.get(i+1))>0)
super.add(i, item); }
catch(IndexOutOfBoundsException e){throw new IllegalArgumentException();}
}
}}
现在我的程序编译但是我存储在arraylist中的整数数量很少。数组列表应该存储20+个整数。我知道我的布尔加法是问题所在。
你们给我的任何帮助都是非常感激的。
答案 0 :(得分:0)
我不是100%确定这会解决您的问题,但对于初学者这段代码:
if(item.compareTo(this.get(i-1))<=0 && item.compareTo(this.get(i+1))>=0)
{super.add(i,item);
return true;}
正在比较arraylist中的每个其他元素,而不是两个相邻元素。您应该将元素i-1与i或i与i + 1进行比较,因为在i位置存在元素。
答案 1 :(得分:0)
您的add
方法过于复杂。如果您知道要添加的列表已排序,那么您只需找到小于要添加的项目的第一个项目并在其之前插入。如果到达此列表的末尾并且没有任何项目较小,那么您知道需要添加到最后。无需与上下项目进行比较,也无需对空列表进行特殊检查。
for (int i = 0; i < size(); i++) {
if (item.compareTo(get(i)) < 0) {
add(i, item);
return;
}
}
add(item);
我不确定布尔返回值是什么。该方法是否应该检测重复并返回false
?