【问题标题】:Creating a stack with an array, what am I doing wrong?用数组创建堆栈,我做错了什么?
【发布时间】:2013-06-17 18:04:32
【问题描述】:

非常简单的想法,我只是不确定为什么它不起作用。当我调用 Stack b = new Stack(5); 时出现错误主要。

这里是主要的

public class Test {

public static void main(String[] args) {
 Stack b = new Stack(5);
  b.push('a');
  b.push('b');
  b.push('c');
  b.printStack();

 }
 }

这是我的堆栈类

public class Stack {
 char[] stack;
 int items;

 public Stack(int size) {
 stack = char[size];
 items = 0;

 }

 public void push (char add){
   if (items == stack.length) {
   System.out.println("Stack is full");
  }
   else {
  stack[items] = add;
  }
 }


   public void printStack() {
  if (items == 0)
   return;
   else {
   for (int i = 0; i < items; i++)
  System.out.println(i);
  }
  }
   }

【问题讨论】:

  • 只是为了确保您在练习,您是否知道 Java 已经有一个 Stack 实现?
  • 你遇到了什么错误?

标签: java class stack


【解决方案1】:

一件事是:

   public Stack(int size) {
     stack = new char[size];
        //^^^you missed new
     items = 0;
   }

同时

 stack[items] = add; //should also increment items 

【讨论】:

  • 我还不关心增加项目,我只想让它运行。由于某种原因,它仍然无法与 new 一起使用。
  • @Jordan 因为你从不增加项目,它总是 0,所以你的打印函数除了返回什么都不做。
  • 我不关心打印,我只是想解决类问题。其他问题列表:无法删除项,无法删除项,无法搜索项,无法找到堆栈的长度,无法反转堆栈,无法搜索堆栈,它有很多问题。
  • 我修复了它,我有一个名为 stack.java 的文件,我试图将它重命名为 Stack.java,但它会自动删除大小写并使其全部小写。为了解决这个问题,我不得不删除该文件,然后将其再次保存为 Stack.java,现在它可以工作了。
  • @Jordan 太好了!请务必将文件名命名为与 Java 中的类名相同,
【解决方案2】:

您需要更新您的阵列。

我可以看到您的推送不会增加项目数。当您压入堆栈时,您还应该增加计数。

【讨论】:

  • 我还不关心这个,只是想让它运行。
【解决方案3】:

在你的构造函数中使用

 stack = new char[size];

【讨论】:

    【解决方案4】:

    在构造函数中创建stack 数组时,您没有使用new 关键字。

    此外,您的push() 方法不会增加items,因此只会不断覆盖stack 数组的第一个元素。

    最后,您的printStack() 方法将无法按预期运行。相反,它将打印直到数字5 的递增数字。您需要更改打印语句才能使其正常工作。

    System.out.println(stack[i]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2020-09-01
      相关资源
      最近更新 更多