Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的堆栈与异常_Java_Exception_Stack - Fatal编程技术网

Java中的堆栈与异常

Java中的堆栈与异常,java,exception,stack,Java,Exception,Stack,问题: b) 堆栈是后进先出(LIFO)数据结构。编写一个Java类 Stacklnt,使用alray作为其私有数据存储整数堆栈 结构。Stacklnt有: 创建Stacklnt对象时设置的最大大小。 如果大小超出范围10到10,则应引发异常。 一千 方法push,用于向堆栈顶部添加值。例外 如果调用push时堆栈已满,则应引发 方法pop,用于删除并返回堆栈顶部的值。 如果在打开pop时堆栈为空,则应引发异常 打电话来 c) 编写一些示例代码,说明类如何从第(b)部分开始堆叠 应该使用。包

问题:

b) 堆栈是后进先出(LIFO)数据结构。编写一个Java类 Stacklnt,使用alray作为其私有数据存储整数堆栈 结构。Stacklnt有:

  • 创建Stacklnt对象时设置的最大大小。 如果大小超出范围10到10,则应引发异常。 一千

  • 方法push,用于向堆栈顶部添加值。例外 如果调用push时堆栈已满,则应引发

  • 方法pop,用于删除并返回堆栈顶部的值。 如果在打开pop时堆栈为空,则应引发异常 打电话来

c) 编写一些示例代码,说明类如何从第(b)部分开始堆叠 应该使用。包括正常使用的示例,以及 抛出异常

好的,基本上这是一个我试图解决的问题,非常感谢你的帮助

例外情况如下表所示

// 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如果你认为这是对你问题的最佳答案,可以将其标记为