题 :
b)Stack是后进先出(LIFO)数据结构.编写一个Java类Stacklnt,它使用alray作为私有数据结构来存储整数堆栈.Stacklnt有:
最大大小,在创建Stacklnt对象时设置.如果大小超出10到10的范围,则应抛出异常.1000
方法push,将值添加到堆栈顶部.如果在调用push时堆栈已满,则应抛出异常.
方法pop,用于删除并返回堆栈顶部的值.如果在调用pop时堆栈为空,则应抛出异常.
c)编写一些示例代码,以显示如何使用(b)部分中的类Stacklnt.包括正常使用的示例以及抛出异常的所有情况.
好吧基本上这是一个我试图解决的问题,真的非常感谢一些帮助.
例外情况就是这种形式
// Throw an exception!
public T pop() throws EmptyStackException
{
if (contents.size() == 0)
{ throw new EmptyStackException(); }
else
{ return contents.remove(0); }
}
Run Code Online (Sandbox Code Playgroud)
我到目前为止:
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];
}
}
Run Code Online (Sandbox Code Playgroud)
你试图一次完成整个程序,这有点困难,因为可能会有许多琐碎的语法错误,其中任何一个都会导致它无法编译.
所以,建议采取婴儿步骤 - 你可能会听到很多.它是这样的(假设你还没有编写任何代码):
1)编辑StackInt.java文件,使其仅包含以下内容:
class StackInt {
}
Run Code Online (Sandbox Code Playgroud)
2)编译它.
2a)如果编译不正确,请在添加新代码之前先修复这些错误.
3)添加少量新代码.比方说,一个main()方法.你的班级现在看起来像这样:
class StackInt {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
4)编译它.然后运行它.如果它不编译,请在继续之前修复这些错误.如果它编译,则运行它.你应该看到它打印出"hello world!".这告诉你它已成功运行.如果没有输出,那么你知道某些事情是错误的,你必须在继续之前解决这个问题.
通过这种方式,您可以使用"婴儿步骤" - 每次只添加少量代码,然后编译并运行它以确保它按预期方式工作.
以这种方式做程序对我来说真的很有帮助.您可以一次处理一个方法,而不是键入所有方法并想知道它失败的位置.我推荐它.
编辑:
由于您已经编写了代码,您可以通过注释掉大部分代码来调整这种"婴儿步骤"方法,这样您就不会浪费它.使用/*和*/注释掉整个部分 - 这样编译器会忽略它,你可以一次尝试一件.它看起来像这样:
class StackInt {
/*
this is "commented out"
push(int number) {
}
*/
public static void main(String[] args) {
System.out.println("hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.