能否在Processing 3中实现Stack?IDE提示"the function push(String) does not exist"
Hey there! Absolutely, you can implement a Stack data structure in Processing 3—let’s break down why you’re seeing that error and how to fix it, plus walk through two solid implementation options.
Why the Error Happens
The "the function push(String) does not exist" message pops up because Processing has a built-in global push() function that’s used for saving drawing state (like transformations, color styles, or font settings). This built-in function takes no arguments, so when you try to call it with a String parameter, the IDE can’t find a matching function and throws an error.
Chances are, you were trying to call a push method for your custom Stack—but you either forgot to tie it to a Stack object, or your method name clashed with Processing’s built-in push().
Solution 1: Build a Custom Stack Class (Recommended)
Create your own Stack class with unique method names to avoid conflicts with Processing’s built-in functions. Here’s a complete example for a String-focused stack:
class StringStack { private ArrayList<String> stackItems; // Constructor to initialize the stack StringStack() { stackItems = new ArrayList<String>(); } // Use a unique name like pushItem instead of push void pushItem(String item) { stackItems.add(item); } // Remove and return the top item String popItem() { if (!isEmpty()) { return stackItems.remove(stackItems.size() - 1); } // Handle empty stack case (adjust based on your needs) println("Stack is empty!"); return null; } // Check if stack is empty boolean isEmpty() { return stackItems.isEmpty(); } // Peek at the top item without removing it String peekItem() { if (!isEmpty()) { return stackItems.get(stackItems.size() - 1); } println("Stack is empty!"); return null; } } // Use the stack in your sketch StringStack myStack; void setup() { size(400, 200); myStack = new StringStack(); // Add items to the stack myStack.pushItem("Hello"); myStack.pushItem("Processing"); myStack.pushItem("Stacks!"); // Test popping items println(myStack.popItem()); // Output: Stacks! println(myStack.peekItem()); // Output: Processing }
Solution 2: Use Java’s Built-in Stack Class
Since Processing is built on Java, you can directly use the java.util.Stack class. This avoids writing your own stack from scratch, and since you’ll call push on a Stack object (not as a global function), it won’t clash with Processing’s built-in push():
// Import the Java Stack class import java.util.Stack; Stack<String> myStack; void setup() { size(400, 200); myStack = new Stack<String>(); // Add items using the Stack object's push method myStack.push("First entry"); myStack.push("Second entry"); // Test stack operations println(myStack.pop()); // Output: Second entry println(myStack.isEmpty()); // Output: false }
Quick Troubleshooting Tip
If you still run into issues, double-check that you’re calling the push method on your Stack object (e.g., myStack.pushItem(...) or myStack.push(...)) instead of calling the global push() function directly with a parameter.
内容的提问来源于stack exchange,提问作者Askhento

