错误:java类中的不兼容类型
我实现了一个java类,但是出现了两个我无法修复的错误。 ERROR1:错误:java类中的不兼容类型
incompatible types
Required: RandomizedQueue<Item>
Found: Item
误差2:
can not find symbol
Symbol: valuable last
location:valuable next of type Item
public class RandomizedQueue<Item> implements Iterable<Item> {
private int number=0;
private Node First=null;
private class Node {
Item item;
Item next=null;
Item last=null;
}
private Node Random() {
double r = Math.random();
int n = (int) (r*number);
if(n==0) n=1;
Node ob=First;
for(int i=0;i<(n-1);i++) {
ob = ob.next; //Error1
}
return ob;
}
public RandomizedQueue() {
Node empty=new Node();
}
public boolean isEmpty() {
return number==0;
}
public int size() {
return number;
}
public void enqueue(Item item) {
if(item==null) throw new NullPointerException();
Node oldfirst = First;
First = new Node();
First.item = item;
First.next = oldfirst; //Error1
oldfirst.last = First;
number++;
}
public Item dequeue() {
Node ob=Random();
Item back = ob.item;
Node temp = ob.last;
temp.next = ob.next;
ob.next.last = temp; //Error2
return back;
}
public Item sample() {
return Random();
}
public Iterator<Item> iterator() { //Error:cannot find symbol symbol:class Itertor
return IndepentRandomIterator();
}
private class IndepentRandomIterator implements Iterator<Item> {
private RandomizedQueue<Item> iq = new RandomizedQueue<Item>();
Node scan = First;
public IndepentRandomIterator() {
while(scan != null) {
iq.enqueue(scan.item);
scan=scan.next;
}
}
public boolean hasNext() {
return iq.number >0;
}
public void remove() {
throw new UnsupportedOperationException();
}
public Item next() {
if(iq.number==0) throw new java.util.NoSuchElementException();
return iq.dequeue();
}
}
public static void main(String[] args) {
RandomizedQueue<String> test = new RandomizedQueue<String>();
test.enqueue("Luo");
test.enqueue("Jiebin");
test.enqueue("is");
test.enqueue("genious");
test.dequeue();
test.dequeue();
StdOut.println("Is it empty?"+test.isEmpty());
StdOut.println("Size: "+test.size());
StdOut.println("A sample: "+test.siample());
Iterator<String> it = test.iterator();
while(test.hasNext()) {
String s = it.next();
StdOut.println(s);
}
}
}
对于第一个错误,您尝试将ob
的值设置为ob.next
。 ob
是Node
,但是ob.next
是Item
。显然,Item
不是Node
,因此您不能将Item
分配给Node
。
同样的道理也适用就行了:
first.next = oldfirst;
first.next
是Item
,但oldFirst
是Node
。您不能将Node
分配给Item
类型的变量。
对于错误cannot find symbol symbol:class Itertor
。那是因为你需要把这个在你的代码的顶部:
import java.util.Iterator;
就行了:
return IndepentRandomIterator();
代码试图调用该方法IndepentRandomIterator()
。为了使调用构造函数IndepentRandomIterator
类,你需要IndepentRandomIterator()
这样的前右侧添加关键字new
:
return new IndepentRandomIterator();
有关此行的错误:
ob.next.last = temp;
代码尝试访问对象ob.next
的字段last
。我想你想访问对象ob.last
。但是,这仍然是一个问题,因为那样你会得到第一个错误。 ob.next
和ob.last
都是Item
类型,但temp
是Node
。
接近代码结束时,您尝试使用StdOut.println()
。 StdOut
不存在;你应该使用System.out.println()
。
的第一个错误不能被诊断为你没有提供Node
类的实现
第二个错误:
你不会创造你的课堂实例。
public Iterator<Item> iterator() { //Error:cannot find symbol symbol:class Itertor
return IndepentRandomIterator();
}
您必须提供一个能够返回的实体。
public Iterator<Item> iterator() { //Error:cannot find symbol symbol:class Itertor
return new IndepentRandomIterator();
}
我投了票,因为它至少解释了两个错误之一 – WarrenFaith
@WarrenFaith *五个错误之一。看到我的答案。 –
我得到了2个以上的编译错误。
首先,在类的第一行:
public class RandomizedQueue<Item> implements Iterable<Item> {
是Item
实际类的名称,或者是它的一类的占位符?
如果它是一个类,那么你的第一个错误是抱怨它无法在这个类上找到'next'字段 - 可能它没有定义或不可见。
如果项目是一个通用占位符,那么你需要定义RandomizedQueue这样的:
public class RandomizedQueue<Item extends MyClass> implements Iterable<Item> {
如果MyClass的确实有一个明显的领域被称为next
其次,代码:
Node oldfirst = First;
First = new Node();
First.item = item;
First.next = oldfirst; //Error1
在我看来,你正试图将一个节点投射到一个物品中。但是究竟是什么是一个Item,并且它与Node有什么关系?
我看不到你要在这里做什么。 看起来你并不真正了解inheritance,在开始使用泛型之前,你确实需要了解它。
没有堆栈跟踪,看起来像编译错误... – WarrenFaith
@luojiebin错误是什么行? –
我建议正确使用基本的java命名约定。类名以大写字母开头,变量名称以较低字母和方法开头。这会让你的代码更容易阅读! – WarrenFaith