我正在制作一个通用方法,该方法可以接受任何类型的列表并找到该列表中最大值的位置,这是我制作的更大程序的一部分,我制作了一个迭代器,我用它来运行列表。我快完成了,但我有两个问题:1.我无法初始化泛型方法中的迭代器。2.无法从列表中获取第一个值。我不擅长解释,相反,我在代码中注释了问题区域。任何帮助都非常感谢!
通用方法:
public static <T> int max(List<T> list, Comparator<? super T> c)
{
if (list == null)
{
throw new NoSuchElementException();
}
int m = 0; // index max value
T maxvalue = list[0]; // max value (error: How do it get the value of the list here?)
int counter = 0;
Iterator<T> it = new DobbeltLenketListeIterator(); //( error: cannot be referenced from a static context)
while(it.hasNext())
{
counter++;
if (c.compare(it.next(), maxvalue) > 0)
{
maxvalue = it.next;
m = counter;
}
}
return m;
}
迭代器:
private class DoublelinkedlistIterator implements Iterator<T>
{
private Node<T> p;
private boolean removeOK;
private DoublelinkedlistIterator()
{
p = head;
removeOK = false;
}
public boolean hasNext()
{
if(p.next != null )
{
return true;
}
return false;
}
public T next()
{
if( hasNext() == false)
{
throw new NoSuchElementException();
}
Node<T> q = p;
p = p.next;
removeOK = true;
return q.value;
}
public void remove()
{
if(!removeOK) throw new IllegalStateException("illegal!");
removeOK = false;
Node<T> q = head;
if(head.next == p)
{
head = head.next;
if(p== null) tale = null;
}
else
{
Node<T> r = head;
while (r.next.next != p)
{
r = r.next;
}
q= r.next;
r.next = p;
if(p== null) tale = r;
}
q.value = null;
q.value = null;
}
}
public Iterator<T> iterator()
{
return new DoublelinkedlistIterator();
}
public Iterator<T> iterator(int index)
{
indexcontrol(index);
Iterator<T> it = new DoublelinkedlistIterator();
for (int i = 0; i < index && it.hasNext(); i++, it.next());
return it;
}
-
将您的内部类标记为
:static
也private static class DoublelinkedlistIterator implements Iterator<T>
-
您尝试将 List 的第一个元素作为数组元素检索。你应该这样写:
T maxvalue = list.get(0);
尝试进行以下两项更改:
使迭代器类static
并为其提供泛型参数T
:
private static class DoublelinkedlistIterator<T> implements Iterator<T>
然后当你使用它时,传递它的类型:
Iterator<T> it = new DobbeltLenketListeIterator<T>();
这是一个困难的问题,但我得到了一些帮助,答案是:Iterator it = list.iterator();
T 最大值 = it.next();
谢谢你们,我很欣赏你们的回答!