Java中的堆栈与异常
问题: b) 堆栈是后进先出(LIFO)数据结构。编写一个Java类 Stacklnt,使用alray作为其私有数据存储整数堆栈 结构。Stacklnt有:Java中的堆栈与异常,java,exception,stack,Java,Exception,Stack,问题: b) 堆栈是后进先出(LIFO)数据结构。编写一个Java类 Stacklnt,使用alray作为其私有数据存储整数堆栈 结构。Stacklnt有: 创建Stacklnt对象时设置的最大大小。 如果大小超出范围10到10,则应引发异常。 一千 方法push,用于向堆栈顶部添加值。例外 如果调用push时堆栈已满,则应引发 方法pop,用于删除并返回堆栈顶部的值。 如果在打开pop时堆栈为空,则应引发异常 打电话来 c) 编写一些示例代码,说明类如何从第(b)部分开始堆叠 应该使用。包
- 创建Stacklnt对象时设置的最大大小。 如果大小超出范围10到10,则应引发异常。 一千
- 方法push,用于向堆栈顶部添加值。例外 如果调用push时堆栈已满,则应引发
- 方法pop,用于删除并返回堆栈顶部的值。 如果在打开pop时堆栈为空,则应引发异常 打电话来
// Throw an exception!
public T pop() throws EmptyStackException
{
if (contents.size() == 0)
{ throw new EmptyStackException(); }
else
{ return contents.remove(0); }
}
到目前为止,我:
public class Stack {
private int top;
private int[] storage;
Stack(int capacity) {
if (capacity <= 0)
throw new IllegalArgumentException(
"Stack's capacity must be positive");
storage = new int[capacity];
top = -1;
}
void push(int value) {
if (top == storage.length)
throw new StackException("Stack's underlying storage is overflow");
top++;
storage[top] = value;
}
int peek() {
if (top == -1)
throw new StackException("Stack is empty");
return storage[top];
}
}
公共类堆栈{
私人int top;
私有int[]存储;
堆栈(整数容量){
如果(容量读取
第11章是关于堆栈和队列的以下是您应该做的:
- 创建名为
Stacklnt
**的类
- 使用整数数组
int[]
作为实例变量
- 使用类的构造函数以给定大小作为构造函数参数来初始化数组。您必须检查此大小是否在范围(10到1000)内
- 使两个实例方法
push
和pop
。您可以使用整数变量作为指向当前数组位置的指针,因此在调用push
时增加它,在调用pop
时减少它。您必须确保此指针不超过限制s(即不低于零,也不高于尺寸)
再次阅读你的问题,找出所有你没有做的事情
- 您还没有输入pop方法
- 您没有遵循示例pop()给出的异常示例
- 您没有正确检查范围
- 您还没有编写实例化堆栈并对其进行测试的main方法
作为对您最后一条问题评论的回答:您的语法不错。我对您的代码进行了一些清理,一旦您实现了StackException类和pop方法,它应该编译正确:
public class Stack {
private int top;
private int[] storage;
public Stack(int capacity) {
if (capacity <= 0) {
throw new IllegalArgumentException(
"Stack's capacity must be positive");
}
top = -1;
storage = new int[capacity];
}
public void push(int value) {
if (top == storage.length) {
throw new StackException("Stack's underlying storage is overflow");
}
top++;
storage[top] = value;
}
public int peek() {
if (top == -1) {
throw new StackException("Stack is empty");
}
return storage[top];
}
public int pop() {
// TODO
}
}
公共类堆栈{
私人int top;
私有int[]存储;
公共堆栈(整数容量){
如果(capacity您试图一次完成整个程序,这有点困难,因为可能会有许多琐碎的语法错误,其中任何一个都会导致它无法编译
因此,建议您采取一些小步骤——您可能会经常听到这一点
1) 编辑StackInt.java文件,使其仅包含以下内容:
class StackInt {
}
2) 编译它。
2a)如果编译不正确,请在添加新代码之前先修复这些错误。
3) 添加少量新代码。例如,一个main()方法。您的类现在如下所示:
class StackInt {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
class StackInt {
/*
this is "commented out"
push(int number) {
}
*/
public static void main(String[] args) {
System.out.println("hello world!");
}
}
4) 编译它。然后运行它。如果它不编译,请在继续之前修复这些错误。如果它编译,请运行它。您应该看到它打印出“hello world!”。这表明它已成功运行。如果没有输出,则您知道某些错误,并且必须在继续之前修复这些错误
通过这种方式,您可以采取“小步骤”——每次只添加少量代码,然后编译并运行它,以确保它按照您期望的方式工作
用这种方式编写程序对我真的很有帮助。你可以一次使用一种方法,而不是把所有的方法都输入,然后想知道它在哪里失败。我建议你这样做
编辑:
由于您已经编写了代码,您可以通过注释掉大部分代码来适应这种“小步骤”方法,这样您就不会浪费代码。使用/*和*/注释掉整个部分-这样编译器就会忽略它,您可以一次尝试一个部分。它看起来是这样的:
class StackInt {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
class StackInt {
/*
this is "commented out"
push(int number) {
}
*/
public static void main(String[] args) {
System.out.println("hello world!");
}
}
希望这能有所帮助。内容是什么类型的?从外观上看,您不是在“使用数组作为其私有数据结构”1.我还没有完成,我只是有点不知道如何可视化代码,就像我知道如何做所有的部分,但似乎无法创建完整的程序一样-就像伪代码在我脑海中是有意义的,但在纸面上我有点迷路-抱歉,我对编程非常陌生。尝试一下,然后向我们展示你所做的事情-看起来不错-你有一个推力()和peek()方法。现在只需添加一个pop()方法,该方法的作用与push()方法相反(即,它从数组中获取项目,从总数中减去一个,然后返回项目-哦,当堆栈为空时,您应该执行类似的检查)。然后,您可以执行main()使用堆栈的方法。还有更多的代码吗?它看起来像是在peek()方法的末尾被截断了…因此您已经有了一个堆栈类,看起来它应该可以工作(尽管我可以发现错误push()--我将通过一些边界测试让您找到它:)。那么你有什么问题?你所需要做的就是编写一个公共静态void main
方法来驱动它,你应该有一个函数堆栈。是的,我的意思是我知道如何做的基本知识,但我似乎无法把它写进代码:谢谢-嗯,那公共静态void人呢该死的我很笨:)阅读第11章他编写示例,而不是理论讨论。OP需要熟悉编写、编译和运行程序,这包括查看语法正确的代码示例。@rachel如果你认为这是对你问题的最佳答案,可以将其标记为