Появляется ошибка, из-за которой stack.peek() не может быть найден. Остальная часть программы, кажется, в порядке

#java #stack

Вопрос:

Основная проблема, по-видимому, заключается в методе removeGreen. Предполагается, что он распечатает стопку без указания зеленого цвета. Я не знаю почему, но когда я компилирую, я получаю сообщение об ошибке «стек».заглянуть не удается. Я не знаю, что не так.

 import java.io.*;
import java.util.*;


public class Pez
{

        public static void main(String[] args)
        {
        Stack stack = new Stack();
        addPez(stack);

        System.out.println("Stack elements: ");
        printStack(stack);

        removeGreen(stack);

        System.out.println("n Stack after removing green: ");
        printStack(stack);

        }
        public static void addPez(Stack stack)
        {
        stack.push("yellow");
        stack.push("red");
        stack.push("green");
        stack.push("green");
        stack.push("yellow");
        stack.push("yellow");
        stack.push("red");
        stack.push("green");
        }

        public static void removeGreen(Stack stack)
        {
        Stack tempStack = new Stack();

        while (stack.isEmpty() == false)
        {
        if (stack.peek() != "green")
        {
        tempStack.push(stack.pop());
        } else {
        stack.pop();
        }

        while (tempStack.isEmpty() == false)
        {
        stack.push(tempStack.pop());
        }
}
}

        public static void printStack(Stack stack)
        {
        if (stack.isEmpty())
        return;
        String data = (String) stack.pop();
        System.out.println(data);
        printStack(stack);
        stack.push(data);
        }

}
 

Комментарии:

1. Кстати != "green" , это не то, как вы сравниваете строки в Java

2. Компилирует для меня.

3. Я тоже, хотя компилятор говорит мне, что существуют небезопасные / непроверенные операции … потому Stack что это универсальный тип.

Ответ №1:

Проблема с методом removegreen заключается в сравнении. Вы сравниваете адрес строки, по которой она не удаляет зеленый элемент. Как сравнить строку в java.

Также вам нужно исправить свой цикл, так как второй цикл while будет работать бесконечно, и вы не получите никакого вывода. вы также можете обновить пустой чек.

 public static void removeGreen1(Stack stack) {
    Stack tempStack = new Stack();
    while (!stack.isEmpty()) {
        if (!"green".equals(stack.peek())) {
            tempStack.push(stack.pop());
        } else {
            stack.pop();
        }               
    }

    while (!tempStack.isEmpty()) {
        stack.push(tempStack.pop());
    }
}