gpt4 book ai didi

java - 我定制的 Stack 类总是抛出 StackIsUnderflowing 异常 : Why?

转载 作者:行者123 更新时间:2023-12-02 10:00:10 25 4
gpt4 key购买 nike

我有一个定制的 Stack 类,它不操作数组,但 ArrayList<String> .

我的 Stack 类有入栈、出栈和大小方法。

我通过 index 实例变量跟踪索引。

我创建了一个数组来保存三个元素。

这三个元素被压入栈中。最后,最后一个元素弹出并打印在控制台上。

我总是遇到自定义 StackIsUnderflowing() 异常。

谁能告诉我错误在哪里吗?

import java.util.ArrayList;


class StackIsUnderflowing extends Exception {

private static final long serialVersionUID = 1 L;

public StackIsUnderflowing() {
super("Stack Underflowing");
}
}

//main Stack class
public class Stack {
private int index;
//List of String literals
private ArrayList < String > aStackArr = new ArrayList < String > ();
private static int ZERO = 0;

//constructor
public Stack() {

this.index = -1;
}

//return the size
public int size() {
return aStackArr.size();
}

//push value on to Stack add value to List of String input variable
public void push(String anInt) {
index = aStackArr.size() - 1;

aStackArr.add(anInt);

System.out.println(index + aStackArr.get(index));

}

//pop values from input variable
public String pop() {

try {
if (index < Stack.ZERO) {
throw new StackIsUnderflowing();
} else {
String result = aStackArr.remove(index);

index = aStackArr.size() - 1;
return result;
}

} catch (Exception e) {
System.out.println(e.getMessage());
System.exit(-1);
return "-1";
}
}

//peek into LIFO top input literal

public static void main(String[] args) {
// TODO Auto-generated method stub
Stack aStack = new Stack();
String[] names = new String[3];
names[0] = "ll";
names[1] = "cc";
names[2] = "dd";
String tmp;

for (int i = 0; i < aStack.size(); ++i) {
System.out.println(names[i]);
aStack.push(names[i]);


}
tmp = aStack.pop();

System.out.println(tmp);
}
}

最佳答案

问题在于您在 aStackArr.add(anInt); 之前分配了 index = aStackArr.size() - 1;。方法 push(String anInt) 应该是这样的:

//push value on to Stack add value to List of String input variable
public void push(String anInt)
{
aStackArr.add(anInt);
index = aStackArr.size() - 1;
System.out.println(index + aStackArr.get(index));
}

此外,添加推送字符串的代码存在问题,循环位于 aStack.size() 而不是 names.length

这是完整的代码(已格式化)

import java.util.ArrayList;

class StackIsUnderflowing extends Exception
{

private static final long serialVersionUID = 1L;

public StackIsUnderflowing()
{
super("Stack Underflowing");
}
}

//main Stack class
public class Stack
{
private int index;
//List of String literals
private ArrayList<String> aStackArr = new ArrayList<String>();
private static int ZERO = 0;

//constructor
public Stack()
{
this.index = -1;
}

//return the size
public int size()
{
return aStackArr.size();
}

//push value on to Stack add value to List of String input variable
public void push(String anInt)
{
aStackArr.add(anInt);
index = aStackArr.size() - 1;
System.out.println(index + aStackArr.get(index));
}

//pop values from input variable
public String pop()
{
try
{
if (index < Stack.ZERO)
{
throw new StackIsUnderflowing();
}
else
{
String result = aStackArr.remove(index);
index = aStackArr.size() - 1;
return result;
}

}
catch (Exception e)
{
e.printStackTrace();
System.exit(-1);
return "-1";
}
}

//peek into LIFO top input literal

public static void main(String[] args)
{
// TODO Auto-generated method stub
Stack aStack = new Stack();
String[] names = new String[3];
names[0] = "ll";
names[1] = "cc";
names[2] = "dd";
String tmp;

for (int i = 0; i < names.length; ++i)
{
System.out.println(names[i]);
aStack.push(names[i]);
}
tmp = aStack.pop();
System.out.println(tmp);
}
}

关于java - 我定制的 Stack 类总是抛出 StackIsUnderflowing 异常 : Why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55694195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com