gpt4 book ai didi

java - 使用 pop() 和 push() 堆栈数组

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:58 25 4
gpt4 key购买 nike

我为使用堆栈的程序创建的 2 个类存在问题。我遇到的第一个问题是,当我尝试运行该程序时出现运行时错误。

这是一件很难问的事情,因为它有几件事情要做。它要求用户输入以将数字添加到堆栈并检查堆栈是满的还是空的。我可能还需要帮助来复制数组。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at IntegerStack.push(IntegerStack.java:24) at Lab15.main(Lab15.java:38)

这是运行程序的主类。

import java.util.Scanner;


public class Lab15 {

public static void main(String[] args)
{
System.out.println("***** Playing with an Integer Stack *****");
final int SIZE = 5;
IntegerStack myStack = new IntegerStack(SIZE);
Scanner scan = new Scanner(System.in);

//Pushing integers onto the stack
System.out.println("Please enter an integer to push onto the stack - OR - 'q' to Quit");
while(scan.hasNextInt())
{
int i = scan.nextInt();
myStack.push(i);
System.out.println("Pushed "+ i);
}

//Pop a couple of entries from the stack
System.out.println("Lets pop 2 elements from the stack");
int count = 0;
while(!myStack.isEmpty() && count<2)
{
System.out.println("Popped "+myStack.pop());
count++;
}

scan.next(); //Clearing the Scanner to get it ready for further input.

//Push a few more integers onto the stack
System.out.println("Push in a few more elements - OR - enter q to quit");
while(scan.hasNextInt())
{
int i = scan.nextInt();
myStack.push(i);
System.out.println("Pushed "+ i);
}

System.out.println("\nThe final contentes of the stack are:");
while(!myStack.isEmpty())
{
System.out.println("Popped "+myStack.pop());
}

}

}

这是将数字添加到堆栈的类,这是有问题的。这是我可能需要帮助复制数组的地方。在最后。

import java.util.Arrays;

public class IntegerStack
{
private int stack [];
private int top;

public IntegerStack(int SIZE)
{
stack = new int [SIZE];
top = -1;
}

public void push(int i)
{
if (top == stack.length)
{
extendStack();
}

stack[top]= i;
top++;
}

public int pop()
{
top --;
return stack[top];
}

public int peek()
{
return stack[top];
}

public boolean isEmpty()
{
if ( top == -1);
{
return true;
}
}

private void extendStack()
{
int [] copy = Arrays.copyOf(stack, stack.length);
}
}

如有任何帮助或指导,我们将不胜感激。

最佳答案

更好的 Stack 实现解决方案

import java.util.List;
import java.util.ArrayList;
public class IntegerStack

{

private List<Integer> stack;

public IntegerStack(int SIZE)
{
stack = new ArrayList<Integer>(SIZE);
}

public void push(int i)
{

stack.add(0,i);
}

public int pop()
{
if(!stack.isEmpty()){
int i= stack.get(0);
stack.remove(0);
return i;
} else{
return -1;// Or any invalid value
}
}

public int peek()
{
if(!stack.isEmpty()){
return stack.get(0);
} else{
return -1;// Or any invalid value
}
}


public boolean isEmpty()
{
stack.isEmpty();
}

}

如果你必须使用数组...这是你的代码中的问题和可能的解决方案

import java.util.Arrays;
public class IntegerStack
{

private int stack [];
private int top;

public IntegerStack(int SIZE)
{
stack = new int [SIZE];
top = -1; // top should be 0. If you keep it as -1, problems will arise when SIZE is passed as 0.
// In your push method -1==0 will be false and your code will try to add the invalid element to Stack ..
/**Solution top=0; */
}

public void push(int i)
{
if (top == stack.length)
{
extendStack();
}

stack[top]= i;
top++;

}

public int pop()
{
top --; // here you are reducing the top before giving the Object back
/*Solution
if(!isEmpty()){
int value = stack[top];
top --;
return value;
} else{
return -1;// OR invalid value
}
*/
return stack[top];
}

public int peek()
{
return stack[top]; // Problem when stack is empty or size is 0
/*Solution
if(!isEmpty()){
return stack[top];
}else{
return -1;// Or any invalid value
}
*/


}


public boolean isEmpty()
{
if ( top == -1); // problem... we changed top to 0 above so here it need to check if its 0 and there should be no semicolon after the if statement
/* Solution if(top==0) */
{
return true;
}
}

private void extendStack()
{

int [] copy = Arrays.copyOf(stack, stack.length); // The second parameter in Arrays.copyOf has no changes, so there will be no change in array length.
/*Solution
stack=Arrays.copyOf(stack, stack.length+1);
*/
}

}

关于java - 使用 pop() 和 push() 堆栈数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240014/

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