1

鉴于在类中main()调用方法时方法中的以下代码,当我以下面提出的方式执行此操作时,输出会有所不同:get()Queue

此代码的输出中显示的所有字母都符合预期

class Queue {
    char get() {
        if (getlock == putlock) {
            System.out.println("-Queue is empty");
            return (char) 0;
        }
        return q[getlock++];
    }
}

public static void main(String[] args) {
    Queue bigQ = new Queue(100);
    Queue smallQ = new Queue(4);

    char ch;
    int i;

    System.out.println("Using bigQ to store the alphabet. ");
    for (i = 0; i < 26; i++)
        bigQ.put((char)('A' + i));

    System.out.print("Contents of bigQ: ");

    for (i = 0; i < 26; i++) {
        ch = bigQ.get();
        if (ch != (char) 0)
            System.out.print(ch);
    }
}

但是,当我不使用char chmain()而是bigQ.get()直接重复调用时,它只显示每三个字母。我很累,不明白为什么。更改后的代码片段如下:

此代码的输出中仅显示每三个字母

    for (i = 0; i < 26; i++) {
        bigQ.get(); 
        if (bigQ.get() != (char) 0)     
            System.out.print(bigQ.get());
    }

微小的变化和这样的差异。如果您能告诉我这是为什么,我将不胜感激,因为我真的不明白。

4

1 回答 1

0

你的get方法是破坏性的。每次调用队列时都会前进一个 -getlock++一段代码。在您更改的代码片段中,您get每次迭代调用 3 次,丢弃其中两个结果。

与英语不同,getJava 通常为不改变状态的方法保留(JSF 除外)。java.util.Queueuses poll, whileremove如果队列为空,则会抛出异常。take也是这种方法的流行选择。

于 2018-10-04T19:50:56.777 回答