0
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 行是否出现错误,即“ArrayQueue.EnQueue(x);” 如果将 EnQueue 函数设为静态,也会出现错误,这是为什么呢?我该如何解决这个错误。错误是非静态方法 Enqueue (Object) 无法从静态上下文中引用

4

2 回答 2

6

信息非常清楚;public void EnQueue不是静态方法,因此您不能将其称为一个。

您不能简单地将其转换为静态方法,因为您试图在类中引用非静态变量。

于 2013-09-15T01:39:09.947 回答
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
于 2013-09-15T02:45:30.147 回答