【问题标题】:Finding index of a stack java [duplicate]查找堆栈java的索引[重复]
【发布时间】:2021-11-20 02:37:01
【问题描述】:

尝试使用堆栈查找输入为 0 的最后一个元素的索引,我使用方法 pop() 和 peek()。

这是我的代码:

public class Main {
    public static void main(String[] args) {
        Stack<String> a = new Stack<>();

        a.push("a");
        a.push("b");
        a.push("c");
        a.push("d");
        a.push("e");
        a.push("f");

        System.out.println(a);
        String str = "f";
        int b = 0;
        for (int i = 0; i < a.size(); i++) {
            if (a.peek().equalsIgnoreCase(str)){
                break;
            }
            a.pop();
            b++;
        }
        System.out.println(str);
        System.out.println(b);
    }
}

str = "f" 时的预期输出:

0

是的,当我尝试使用我的解决方案时,它可以正常工作。

直到我尝试使用 str = "b" 预期输出:

[a, b, c, d, e, f]
b
4

实际输出:

[a, b, c, d, e, f]
b
3

同样使用 str = "a", 预期输出:

[a, b, c, d, e, f]
a
5

实际输出:

[a, b, c, d, e, f]
a
3

因此,无论出于何种原因,直到堆栈上的最后两个元素,int b 都没有增加。知道为什么会这样吗?

【问题讨论】:

  • 如果你要弹出,为什么还要偷看呢?
  • 因为无论出于何种原因,如果您继续查看循环内部的任何原因,它都不会移动到前一个元素上,因此您必须不断弹出以便可以查看前一个元素。至少这就是我尝试时发生的事情,除非我做错了什么
  • @ScaryWombat 询问为什么 peek。 您必须弹出,但 pop 返回的值与 peek 相同,因此您不需要 peek。这里的问题是您从零增加b,而您应该从a.size()-1 减少它。但是堆栈中某物的索引有什么用仍然是一个谜,而当堆栈被修改后,它的用途就更成谜了。实际上你根本不需要b,因为答案总是a.size()-1
  • @user207421 “但是堆栈中某物的索引有什么用仍然是个谜” 确实,只是我的老师给了学生一个特定的任务,而那个任务特别命令我们使用堆栈。如果它使用任何其他存储元素的方法。我宁愿更多地使用它。它只是围绕堆栈本身工作让我很困惑
  • 你可以随时问你的老师他在说什么。给他看这个页面。堆栈只能通过 push 和 pop 访问,而不是通过索引:否则它们将不再是堆栈,而仅仅是数组或列表。

标签: java stack


【解决方案1】:

更简单的方法是测试empty

如果不是empty,则pop Pop 返回顶部对象,然后您可以对其进行测试。如果匹配则中断。

【讨论】:

  • 哇哦,谢谢它终于成功了!
【解决方案2】:

a.pop() 将更改为 a.size()。您应该首先将a.size() 存储为长度并开始循环以查找索引。最后,如果第一个输入元素的索引是0,那么你找到的元素的索引就是length - b

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 2012-09-11
    • 2021-08-07
    • 2014-12-05
    • 1970-01-01
    相关资源
    最近更新 更多