基于我调用 get() 方法的方式的不同输出
Different output based on the way I invoke a get() method
在 class Queue
中调用 get()
方法时,在 main()
方法中给出以下代码,当我按照下面提出的方式执行此操作时,输出会有所不同:
此代码输出中显示的所有字母均符合预期 :
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);
}
}
然而,当我不在 main()
中使用 char ch
而是直接重复调用 bigQ.get()
时,它只显示每三个字母。我累了,不明白为什么。更改后的代码片段如下:
此代码的输出中仅显示每隔三个字母
for (i = 0; i < 26; i++) {
bigQ.get();
if (bigQ.get() != (char) 0)
System.out.print(bigQ.get());
}
小的变化和这样的差异。如果你能告诉我这是为什么,我将不胜感激,因为我真的不明白。
你的get
方法是破坏性的。每次调用时,队列都会前进一个 - getlock++
段代码。在您更改的代码片段中,您每次迭代调用 get
三次,丢弃其中两个结果。
与英语不同,Java 中的 get
通常保留用于不改变状态的方法(JSF 除外)。 java.util.Queue
使用 poll
,而 remove
如果队列为空则抛出异常。 take
也是这种方法的流行选择。
在 class Queue
中调用 get()
方法时,在 main()
方法中给出以下代码,当我按照下面提出的方式执行此操作时,输出会有所不同:
此代码输出中显示的所有字母均符合预期 :
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);
}
}
然而,当我不在 main()
中使用 char ch
而是直接重复调用 bigQ.get()
时,它只显示每三个字母。我累了,不明白为什么。更改后的代码片段如下:
此代码的输出中仅显示每隔三个字母
for (i = 0; i < 26; i++) {
bigQ.get();
if (bigQ.get() != (char) 0)
System.out.print(bigQ.get());
}
小的变化和这样的差异。如果你能告诉我这是为什么,我将不胜感激,因为我真的不明白。
你的get
方法是破坏性的。每次调用时,队列都会前进一个 - getlock++
段代码。在您更改的代码片段中,您每次迭代调用 get
三次,丢弃其中两个结果。
与英语不同,Java 中的 get
通常保留用于不改变状态的方法(JSF 除外)。 java.util.Queue
使用 poll
,而 remove
如果队列为空则抛出异常。 take
也是这种方法的流行选择。