如何防止将不需要的数据添加到队列中?
How can I prevent Undesired data from being added into the Queue?
我使用 stack 和 queue 数据结构的组合编写代码。我的代码可以正常工作,但 main()
方法有问题。
我正在使用循环来读取用户的输入。当用户输入 "Exit"
.
时,循环将中断
单词 "Exit"
不应被压入 到堆栈,但在我的代码中它被压入。
我已经使用 if
条件来中断循环,但它没有用。
我的代码:
public static void main(String[] args) {
StackQueue stackQueue = new StackQueue();
int dataLength = 0, i = 0;
Object data = "Start";
System.out.println("Enter data or 'Exit' to exit:");
while (!data.equals("Exit")) {
if (data.equals("Exit"))
break;
else {
data = input.nextLine();
stackQueue.enqueue(data);
dataLength++;
} // else
} // while loop
System.out.println("The entered data is: ");
while (dataLength > 0) {
System.out.println("The data no." + (i += 1) + ": " + stackQueue.dequeue());
dataLength--;
} // while loop
}// Main Method
我的输出:
问题是您在将 Input 添加到堆栈后检查 Input 是否为“Exit”。
您可以做的是获取输入,然后再对其进行测试。
data = input.nextLine();
while(!data.equals("Exit")){
stackQueue.enqueue(data);
dataLength++;
data = input.nextLine();
}
还有一点就是这个测试
if (data.equals("Exit"))
没有做任何事情,因为您已经检查了 while 循环条件中的输入是相同的。
在代码中,您列出了用户提供的任何输入都将添加到队列中。如果输入等于 "Exit"
,while
循环的条件将被触发,即您的 if
语句将永远不会被执行。
您需要更改第一个 while
循环,方法是在读取用户输入之后和将数据存储到排队。
为了避免冗余,while
循环的条件可以设置为true
,因为if
语句将负责退出循环。
// your code
while (true) {
data = input.nextLine();
if (data.equals("Exit")) break;
stackQueue.enqueue(data);
dataLength++;
}
// your code
更改后的输出
A
B
C
Exit
The entered data is:
The data no.1: C
The data no.2: B
The data no.3: A
旁注:
- 当您知道预期的类型时,避免使用对象类型,在这种情况下,
data
必须是 String
; 类型
- 您可以使用
equalsIgnoreCase()
而不是与 equals()
的严格比较,这样输入“Exit”和“exit”都会终止循环。
- 最好将代码中使用的常量值定义为 class 顶部的
public static final
变量。然后按名称引用它们。它避免了排泄性的拼写错误(多次输入值时,您可能会在某个地方拼错),并且如果您需要更改它们,则可以快速访问这些常量,因为它们将全部组合在一起而不是分散在各处代码。
我使用 stack 和 queue 数据结构的组合编写代码。我的代码可以正常工作,但 main()
方法有问题。
我正在使用循环来读取用户的输入。当用户输入 "Exit"
.
单词 "Exit"
不应被压入 到堆栈,但在我的代码中它被压入。
我已经使用 if
条件来中断循环,但它没有用。
我的代码:
public static void main(String[] args) {
StackQueue stackQueue = new StackQueue();
int dataLength = 0, i = 0;
Object data = "Start";
System.out.println("Enter data or 'Exit' to exit:");
while (!data.equals("Exit")) {
if (data.equals("Exit"))
break;
else {
data = input.nextLine();
stackQueue.enqueue(data);
dataLength++;
} // else
} // while loop
System.out.println("The entered data is: ");
while (dataLength > 0) {
System.out.println("The data no." + (i += 1) + ": " + stackQueue.dequeue());
dataLength--;
} // while loop
}// Main Method
我的输出:
问题是您在将 Input 添加到堆栈后检查 Input 是否为“Exit”。 您可以做的是获取输入,然后再对其进行测试。
data = input.nextLine();
while(!data.equals("Exit")){
stackQueue.enqueue(data);
dataLength++;
data = input.nextLine();
}
还有一点就是这个测试
if (data.equals("Exit"))
没有做任何事情,因为您已经检查了 while 循环条件中的输入是相同的。
在代码中,您列出了用户提供的任何输入都将添加到队列中。如果输入等于 "Exit"
,while
循环的条件将被触发,即您的 if
语句将永远不会被执行。
您需要更改第一个 while
循环,方法是在读取用户输入之后和将数据存储到排队。
为了避免冗余,while
循环的条件可以设置为true
,因为if
语句将负责退出循环。
// your code
while (true) {
data = input.nextLine();
if (data.equals("Exit")) break;
stackQueue.enqueue(data);
dataLength++;
}
// your code
更改后的输出
A
B
C
Exit
The entered data is:
The data no.1: C
The data no.2: B
The data no.3: A
旁注:
- 当您知道预期的类型时,避免使用对象类型,在这种情况下,
data
必须是String
; 类型
- 您可以使用
equalsIgnoreCase()
而不是与equals()
的严格比较,这样输入“Exit”和“exit”都会终止循环。 - 最好将代码中使用的常量值定义为 class 顶部的
public static final
变量。然后按名称引用它们。它避免了排泄性的拼写错误(多次输入值时,您可能会在某个地方拼错),并且如果您需要更改它们,则可以快速访问这些常量,因为它们将全部组合在一起而不是分散在各处代码。