Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JAVA实现元素顺序递增的集合-“越界”错误_Java_Collections_Interface_Comparable - Fatal编程技术网

用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的定义在哪里?