如何在线程“ main”中修复异常java.lang.IllegalStateException

问题描述

我的代码遇到有关线程main中异常的问题。这是弹出的错误

Exception in thread "main" java.lang.IllegalStateException: Attempt to create a stack whose capacity exceeds allowed maximum of 10000 
    at ResizeableArrayStack.checkCapacity(ResizeableArrayStack.java:74)
    at ResizeableArrayStack.ensureCapacity(ResizeableArrayStack.java:82)
    at ResizeableArrayStack.push(ResizeableArrayStack.java:28)
    at ResizeableArrayStack.evaluatePostfix(ResizeableArrayStack.java:98)
    at ResizeableArrayStack.main(ResizeableArrayStack.java:157)

这是我的代码

import java.util.*;
public class ResizeableArrayStack<T> implements StackInterface<T> 
{
    private T[] stack;
    private int topIndex;
    private boolean integrityOK = false;
    private static final int DEFAULT_CAPACITY = 50;
    private static final int MAX_CAPACITY = 100000;
    
    public ResizeableArrayStack() 
    {
        this(DEFAULT_CAPACITY);
    }

    public ResizeableArrayStack(int initialCapacity) 
    {
        integrityOK = false;
        checkCapacity(initialCapacity);
        // The cast is safe because the new array contains null entries
        @SuppressWarnings("unchecked")
        T[] tempStack = (T[])new Object[initialCapacity];
        stack = tempStack;
        topIndex = -1;
        integrityOK = true;
    }
    
    public void push(T newEntry) {
        checkIntegrity();
        ensureCapacity();
        stack[topIndex + 1] = newEntry;
        topIndex++;
    }
    
    private void checkCapacity(int capacity) {
        if (capacity > MAX_CAPACITY) {
            throw new IllegalStateException("Attempt to create a stack whose capacity exceeds allowed 
            maximum of " + MAX_CAPACITY);
        }
    } // end checkCapacity
    
    private void ensureCapacity() {
        if (topIndex >= stack.length - 1) {
        // If array is full,double its size 
            int newLength = 2 * stack.length;
            checkCapacity(newLength);
            stack = Arrays.copyOf(stack,newLength);
        }
    } //end ensureCapacity
    
    public static void main(String[] args) {
        String input = "ab*ca-/de*+";
        ResizeableArrayStack<String> astack = new ResizeableArrayStack<>(input.length());
        int evaluation = astack.evaluatePostfix(input);
        System.out.println("Evaluating Postfix Expressions");
        System.out.println("The evaluation of the postfix expression is " + evaluation);
    }
}

我很确定问题在于如何设置和比较容量值,但我不知道为什么会出现此错误。我认为问题在于涉及容量和主要方法的构造函数中。请忽略main中的validatePostfix方法,因为所有错误均表示它们来自构造函数和main。如果您认为问题出在其中,我可以放上valuatePostfix。我还删除了问题中没有提到的方法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)