本人刚刚开始学JAVA编程 老师给留的作业,我遇到了一个小问题,请大侠帮忙!3Q
是压栈弹栈的程序!
以下代码的运行时错误(开发工具是MyEclipse5.1)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at stacklx.Stack.inStack(Stack.java:18)
at stacklx.Test.main(Test.java:24)
错误的代码分别是下面//*******************************的行!
/////////////////////请问怎么才能把错误修正啊?////////////////////////
package stacklx;
public class Stack {
private int i;
public Stack(int a) {
i = a;
}
private String[] stack = new String[i];
private int top = -1;
public void inStack(String x) {
if (fullStack()) {
System.out.println("栈已满,不能在压栈了!");
} else {
top++;
stack[top] = x; //**************************************************
System.out.println("压入数据:" + x);
}
}
public void outStack() {
if (emputyStack()) {
System.out.println("栈已空,不能在弹栈了!");
} else {
String temp = stack[top];
stack[top] = null;
top--;
System.out.println("弹出数据:" + temp);
}
}
public boolean emputyStack() {
if (top == -1) {
return true;
} else {
return false;
}
}
public boolean fullStack() {
if (top == i-1) {
return true;
} else {
return false;
}
}
public int showTop() {
return top;
}
public String showTopData() {
if (emputyStack()) {
return null;
} else {
return stack[top];
}
}
}
下面的是测试类!
package stacklx;
public class Test {
public static void main(String[] args) {
Stack stack=new Stack(8);
//Stack stack=new Stack();
// if(stack.emputyStack()){
// System.out.println("是空栈!");
// }else{
// System.out.println("不是空栈!");
// }
// if(stack.fullStack()){
// System.out.println("是满栈!");
// }else{
// System.out.println("不是满栈!");
// }
for(int i=0;i<15;i++){
String a=""+i;
stack.inStack(a); //******************************************************
}
System.out.println(stack.showTop());
System.out.println(stack.showTopData());
for(int i=0;i<15;i++){
stack.outStack();
}
System.out.println(stack.showTop());
System.out.println(stack.showTopData());
}
}
-------------------------------------------------------------------------------
http://bbs.bc-cn.net/viewthread.php?tid=131674 JPanel添加键盘事件
http://bbs.bc-cn.net/viewthread.php?tid=11146 JAVA起步篇
http://bbs.bc-cn.net/viewthread.php?tid=131690 JAVA中JInternalFrame位置设置
http://bbs.bc-cn.net/viewthread.php?tid=131308 请问字符串如何转换成16进制?
http://bbs.bc-cn.net/viewthread.php?tid=130806 学习java的30个目标
http://bbs.bc-cn.net/viewthread.php?tid=131234 Java精华积累:每个初学者都应该搞懂的问题!
http://bbs.bc-cn.net/viewthread.php?tid=89608 课堂笔记学习java(初级)
http://bbs.bc-cn.net/dispbbs.asp?boardid=8&replyid=96344&id=130228&page=1&skin=0&star=1 Integer的问题
http://bbs.bc-cn.net/viewthread.php?tid=126568 Swing窗口程序中加入URL
http://bbs.bc-cn.net/dispbbs.asp?boardid=8&replyid=152996&id=140521&page=1&skin=0&star=1
90天学J2SE经验浅谈 附带各板块学习作品原码
http://bbs.bc-cn.net/dispbbs.asp?boardid=8&replyid=156397&id=141585&page=1&skin=0&star=1
JavaSE GUI 编程的一个例子
http://bbs.bc-cn.net/viewthread.php?tid=141632&extra=&page=1 一起来玩JavaFX
http://bbs.bc-cn.net/viewthread.php?tid=124249 java的内存模型
[此贴子已经被作者于2007-10-7 1:03:53编辑过]
----------------解决方案--------------------------------------------------------
我只知道是数组的问题~~~~~
----------------解决方案--------------------------------------------------------
怎么改呢?
----------------解决方案--------------------------------------------------------
stack创建用的是未初始化的i值,长度为0的数组,当然不能修改stack[top]。
Stack类的初始化方法应该有长度为i的stack字符串数组的创建。
private int i;
private String[] stack;
public Stack(int a) {
i = a;
stack= new String[i];
}
[此贴子已经被作者于2007-3-5 15:50:02编辑过]
----------------解决方案--------------------------------------------------------
谢谢4楼的提示!
问题已经解决了!
要是这样的话那个private int i;就没有什么用了
我直接把Stack(int a)的形参写到new String[a]中了
多谢你了!
----------------解决方案--------------------------------------------------------
厉害 ,我也学了一招
----------------解决方案--------------------------------------------------------