如何防止将不需要的数据添加到队列中?

How can I prevent Undesired data from being added into the Queue?

我使用 stackqueue 数据结构的组合编写代码。我的代码可以正常工作,但 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 变量。然后按名称引用它们。它避免了排泄性的拼写错误(多次输入值时,您可能会在某个地方拼错),并且如果您需要更改它们,则可以快速访问这些常量,因为它们将全部组合在一起而不是分散在各处代码。