【发布时间】:2020-05-21 15:20:33
【问题描述】:
我遇到了导致 Java 编译被拒绝的格式问题。
此代码在 Netbeans 中有效,但 Web 编译检查器拒绝接受它。
我正在创建一个迭代器,我想要一个链表中随机排序的节点数组。
使用
在代码中,例如有“int[] vals = new int[numEntries]”,它可以毫无怨言地工作。这是一个整数列表。我想要一个 Node
[unchecked] unchecked conversion
required: RandomizedQueue<Item>.Node<Item>[]
found: RandomizedQueue.Node[]
where Item is a type-variable:
Item extends Object declared in class RandomizedQueue
有问题的行是 Node
我尝试了 Node
public Iterator<Item> iterator() {
Iterator<Item> it = new Iterator<Item>() {
private final Node<Item>[] elements = init1();
private int indx = 0;
private Node<Item>[] init1() {
Node<Item>[] ret1 = new Node[numEntries];
Node<Item> curr;
int[] vals = new int[numEntries];
int i, j, val;
int[] free = new int[numEntries];
for( i=0; i<numEntries; i++) {
free[i] = i;
}
for( i=0; i<numEntries; i++) {
j = numEntries-i;
val = StdRandom.uniform(j);
vals[i] = free[val];
free[val] = free[j-1];
}
for( i=0; i<numEntries; i++) {
curr = head;
j = vals[i];
while( j-- > 0) curr = curr.next;
ret1[i] = curr;
}
return ret1;
}
【问题讨论】:
-
也许this answer 会为您解决问题。您可以使用参数化列表而不是数组。
-
一个问题是我不允许包含任何库,包括 java.lang 之外的任何内容。我被允许在 algs4.jar 中使用东西,但我没有找到任何可以解决问题的东西。我基本上想做的是制作一个对象数组。
-
并且提供的链接解释了为什么你不能在没有 Java 警告的情况下这样做。另外,如果你写的是真的,你也不能使用迭代器,因为它(连同 ArrayList)在 java.util 包中。
-
作为这个问题的一个特例,java.util.Iterator 是允许的。 ArrayList 和 LinkedList 是明确禁止的,但一般来说 java.util 中的东西和其他大多数东西都没有了。
-
我有一种令人毛骨悚然的感觉,您的 Node 类应该是链表的一个节点。在这种情况下,您应该能够通过遍历列表来实现迭代器,而无需借助数组创建。也许您可以编辑帖子并澄清您到底想在这里完成什么。并创建一个minimal reproducible example