用JAVA实现元素顺序递增的集合-“越界”错误
我的任务是按升序实现一个元素集合,以及向集合中添加元素、打印集合中的所有元素、加载一个元素并将其从集合中删除的方法,我可以假设我总是加载最小的元素。 我应该使用可比较的界面 此外,我需要使用可比较的接口实现类层次结构,例如,它可以是军事等级的层次结构 这是我的密码:用JAVA实现元素顺序递增的集合-“越界”错误,java,collections,interface,comparable,Java,Collections,Interface,Comparable,我的任务是按升序实现一个元素集合,以及向集合中添加元素、打印集合中的所有元素、加载一个元素并将其从集合中删除的方法,我可以假设我总是加载最小的元素。 我应该使用可比较的界面 此外,我需要使用可比较的接口实现类层次结构,例如,它可以是军事等级的层次结构 这是我的密码: public class Collection<T extends Comparable<T>> implements Iterable<T> { public LinkedList<
public class Collection<T extends Comparable<T>> implements Iterable<T>
{
public LinkedList<T> collection;
public Collection()
{
collection = new LinkedList<>();
}
public void addToList(T new)
{
int i = 0;
while (collection .get(i).compareTo(new) < 0)
{
i++;
}
collection.add(i, new);
}
public T load() throws EmptyStackException
{
if (collection.size() == 0)
{
throw new EmptyStackException();
}
T first = collection.getFirst();
collection.removeFirst();
return first;
}
public void printElements()
{
for (T obj : collection)
{
System.out.println(obj);
}
}
@Override
public Iterator<T> iterator()
{
return this.collection.iterator();
}
}
public abstract class Soldier implements Comparable<Soldier>
{
public String Name;
public abstract double Rank();
public int compareTo(Soldier S)
{
if(S.Rank() == this.Rank())
{
return 0;
}
else if (S.Rank() < this.Rank())
{
return 1;
}
else return -1;
}
}
public class General extends Soldier
{
public double Rank()
{
return 4;
}
public General(String Name)
{
this.Name = Name;
}
}
public class Colonel extends Soldier
{
public double Rank()
{
return 3;
}
public Colonel(String Name)
{
this.Name = Name;
}
}
public class Corporal extends Soldier
{
public double Rank()
{
return 2;
}
public Corporal(String Name)
{
this.Name = Name;
}
}
public class Private extends Soldier
{
public double Ranga()
{
return 1;
}
public Private(String Name)
{
this.Name = Name;
}
}
当我尝试运行一些测试时,我得到了一个超出范围的错误索引。这里到底发生了什么?我怀疑我不能正确地将元素添加到我的集合中。这个代码正确吗 可以在此处隔离问题:
public LinkedList<T> collection;
public Collection()
{
collection = new LinkedList<>();
}
public void addToList(T new)
{
int i = 0;
while (collection.get(i).compareTo(new) < 0)
{
i++;
}
collection.add(i, new);
}
第一次尝试添加元素时,将零传递给collection.get。这将尝试获取第一个元素,因为列表的索引为零,但没有要获取的第一个元素
此外,“new”在Java中是一个关键字,不能用作标识符。可以在此处隔离问题:
public LinkedList<T> collection;
public Collection()
{
collection = new LinkedList<>();
}
public void addToList(T new)
{
int i = 0;
while (collection.get(i).compareTo(new) < 0)
{
i++;
}
collection.add(i, new);
}
第一次尝试添加元素时,将零传递给collection.get。这将尝试获取第一个元素,因为列表的索引为零,但没有要获取的第一个元素
此外,“new”在Java中是一个关键字,不能用作标识符。您的问题在于这个循环
while (collection .get(i).compareTo(new) < 0)
{
i++;
}
你的问题就在于这个循环
while (collection .get(i).compareTo(new) < 0)
{
i++;
}
已经有一个名为的接口。我强烈建议您更改为MyCollection,例如,以避免名称冲突和不可避免的头痛。addToList中的kolekcja在哪里定义?已经有一个名为的接口。我强烈建议你改为MyCollection,以避免名字冲突和不可避免的头痛。addToList中kolekcja的定义在哪里?