我为使用堆栈的程序创建的2个类有问题。我得到的第一个问题是,当我尝试运行程序时,出现运行时错误。
这很难问,因为它做了很多事情。它要求用户输入以将数字添加到堆栈中,并检查堆栈是满还是空。我也可能需要帮助来复制阵列。
线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:在Lab15.main(Lab15.java:38)处在IntegerStack.push(IntegerStack.java:24)处为-1
这是运行程序的主要类。
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();
}
}
如果您必须使用Array …这是您的代码中的问题以及可能的解决方案
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);
*/
}
}
我有一个空的整数堆栈,和以下格式的q查询:Push x:在堆栈顶部添加x Pop:移除堆栈顶部top:打印堆栈顶部示例输入:10 Push 5 top Push 6 top Push 3 top Pop top Pop top输出:5 6 3 6 5我将把我的代码放在注释中,因为我不知道怎么放在这里..我知道这是极其错误的但请我需要帮助来改进它
本文向大家介绍JavaScript数组函数unshift、shift、pop、push使用实例,包括了JavaScript数组函数unshift、shift、pop、push使用实例的使用技巧和注意事项,需要的朋友参考一下 如何声明数组 s中数组的声明可以有几种方式声明 在new数组的时候可以传入一个参数,表示数组的初始化长度 但如果你想创建一个只有一个元素3的数组,那么使用 new 方法是不能实
问题内容: 我试图从我在主java文件中创建的数组中添加,删除和引用项目,但是我在弄清楚正确的语法时遇到了麻烦。在动作脚本中,它们具有push()和pop()来添加和删除数组中的项目,android中是否有等效项? 问题答案: 在Java中,数组的大小是固定的(初始化后),这意味着您无法在数组中添加或删除项目。 上面的代码段表示整数数组的长度为10。如果不将引用重新分配给新数组,则不能添加第11个
NSIS除了提供了变量$0~$9,$r0~$r9来存放文字外,还有堆栈,而通过Push和Pop这两个堆栈操作可以将一些数字或字符暂时存放到堆栈里面。 下面是一个简单例子,实现功能是保护某个变量的值: SetCompressor /SOLID lzma SetCompress force XPStyle on OutFile "aaa.EXE" Name "aaa" Section StrCpy
问题内容: 这是声明Java数组的常用方法: 但是此数组正在使用堆空间。有没有一种方法可以使用像c ++这样的堆栈空间来声明数组? 问题答案: 一言以蔽之。 存储在堆栈中的唯一变量是基元和对象引用。在您的示例中,引用存储在堆栈上,但它引用堆上的数据。 如果由于要确保清理内存而问来自C ++的问题,请阅读有关垃圾回收的信息。简而言之,Java自动处理清理堆中的内存以及堆栈中的内存。
问题内容: 内核堆栈和用户堆栈有什么区别?为什么要使用内核堆栈?如果在ISR中声明了局部变量,它将存储在哪里?每个进程都有自己的内核堆栈吗?那么,进程如何在这两个堆栈之间进行协调? 问题答案: 内核堆栈和用户堆栈有什么区别? 简而言之,除了在内存中使用不同的位置(并因此为堆栈指针寄存器使用不同的值)之外,什么也没有,而且通常使用不同的内存访问保护。也就是说,在用户模式下执行时,即使映射了内核内存(