#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"
, это не то, как вы сравниваете строки в Java2. Компилирует для меня.
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());
}
}