public class Queue {
public class ArrayQueue
{
Object store[];
int front,rear;
static final int MAX = 100;
public ArrayQueue()
{
store = new Object[MAX];
front = rear = 0;
}
public void EnQueue(Object o)
{
if((rear +1)%MAX!=front)
{
store [rear] = o;
rear = (rear + 1) % MAX;
}
}
public Object dequeue() throws Exception
{
if( empty())
{
throw new Exception();
}
else
{
Object data = store[front];
store [front] = null;
front = (front+1)%MAX;
return data;
}
}
}
public static void main (String args)
{
main();
}
public static void main()
{
String choice;
Scanner input = new Scanner(System.in);
System.out.println("A.EnQueue");
System.out.println("B.DeQueue");
System.out.println("C.Print");
System.out.println("D.MakeNull");
System.out.println("E.Empty");
System.out.println("F.Full");
System.out.println("G.Exit");
choice = input.nextLine();
switch(choice){
case "A":
System.out.println("Enter a character");
char x;
x= input.next().charAt(0);
// ArrayQueue.EnQueue(x);
System.out.println(x+"was added to the queue");
}
}
}
}
我遇到静电问题,实际上是静态方法,在第76行发生错误,即#34; ArrayQueue.EnQueue(x);"如果使EnQueue函数静态,那么还有一个错误,为什么呢?我该如何解决这个错误。错误是非静态方法Enqueue(Object)无法从静态上下文引用
答案 0 :(得分:6)
信息非常明确; public void EnQueue
不是静态方法,因此您无法将其称为一个。
您不能简单地将其转换为静态方法,因为您试图在类中引用非静态变量。
答案 1 :(得分:2)
静态和非静态方法的主要区别在于静态方法属于整个类,非静态方法属于该类的特定实例。通常,非静态方法是以某种方式改变对象状态的方法。在您的情况下,enQueue()
和deQueue()
方法都是更改ArrayQueue对象实例状态的方法,因此这两种方法都应该是非静态方法。
现在,为了调用非静态方法来修改(更改对象的状态),您需要首先实例化ArrayQueue对象的实例,然后在该特定对象上调用enQueue方法。
例如:
ArrayQueue myQueue = new ArrayQueue(); //instantiate the object first
myQueue.enQueue(variable); //then access the non-static methods to act on that object