Сейчас я работаю со Стеками в Java.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу создать стек, в котором будут храниться предметы типа «конфеты».
Я хочу добавить эту "конфету" в Producer.java
Но когда я запускаю код, показанный ниже, я получаю ошибку:
Исключение в потоке "main" java.util.EmptyStackException
на java.util.Stack.peek (Stack.java:102)
в java.util.Stack.pop (Stack.java:84)
в app.fachinformatiker.myMashup.Model.Consumer. (Consumer.java:10)
в app.fachinformatiker.myMashup.Main.Main.initializeConsumers (Main.java:84)
в app.fachinformatiker.myMashup.Main.Main.main (Main.java:42)
Это соответствующие строки
Consumer.java: 10
String Candy = candyStack.pop();
Main.java: 84
consumerList.add(new Consumer(candyStack));
Main.java: 42
initializeConsumers();
Не понимаю, почему мой стек не заполнен должным образом.
Ниже вы найдете несколько фрагментов моего кода.
Если вы хотите загрузить весь мой код и запустить его в IDE по вашему выбору (я использую IntelliJ IDEA), вот прямая ссылка на архив на GitHub (конкретный коммит): https://github.com/fachinformatiker/myMashup/archive/97e3ffb.zip
Вот некоторые фрагменты моего кода:
В моем Main.java
private static final Stack<String> candyStack = new Stack<>();
private static final ArrayList<Producer> producerList = new ArrayList<>();
private static final ArrayList<Consumer> consumerList = new ArrayList<>();
...
private static void startProducers() {
for (int i = 0; i < producerList.size(); i++) {
System.out.println("I would start producer Nr. " + i + " now.");
producerList.get(i).start();
}
}
private static void startConsumer() {
for (int i = 0; i < consumerList.size(); i++) {
Debug.gebeInfoAus("I would start consumer Nr. " + i + " now.");
consumerList.get(i).start();
}
}
private static void initializeProducers() {
if (ArgController.istAusgewertet) {
Debug.gebeInfoAus("Producer istAusgewertet");
return;
}
for (int i = 0; i < ArgController.getAnzahlProduzenten(); i++) {
Debug.gebeInfoAus("Producer Nr. " + i + " added to candyStack");
producerList.add(new Producer(candyStack, i));
}
}
в моем Producer.java
public class Producer {
private Candy candy = new Candy();
private String myCandy;
int hell = candy.getHell();
String hope = candy.getHope();
public Producer(Stack<String> candyStack, int i) {
myCandy = i + ";" + hell + ";" + hope;
candyStack.push(myCandy);
Debug.gebeInfoAus(myCandy);
}
public void start() {
}
}
В моем Consumer.java
public class Consumer {
public Consumer(Stack<String> candyStack) {
String Candy = candyStack.pop();
Debug.gebeInfoAus(Candy);
}
public void start() {
}
}