【问题标题】:Passing Stack to a function将堆栈传递给函数
【发布时间】:2021-12-30 22:21:39
【问题描述】:

我正在尝试解决有关hackerrank 的问题。但我每次都收到emptyStack 异常。我认为这可能是因为我将堆栈传递给getMax 函数并且它正在更改原始堆栈.
我试图在 getMax 中写这个,希望它不会影响最终堆栈,但它没有工作。

Stack<Integer> s=st;

你能指出并解释我犯的错误吗?

  • 对于某些测试用例,该程序运行得非常好。(0,2,27)

  • 问题链接https://www.hackerrank.com/challenges/maximum-element/copy-from/243724938

  • 我的解决方案:

    import java.util.*;
    class Solution
    {
    static void getMax(Stack<Integer> st)
    {
     Stack<Integer> s=st;
     int max=s.peek();
     s.pop();
     while(!s.empty())
     {
         if(s.peek()>max)
         max=s.peek();
         s.pop();       
     }
     System.out.println(max);
     }
     public static void main(String args[])
     {
     Stack<Integer> s=new Stack<Integer>();
     Scanner sc=new Scanner(System.in);
     int n=sc.nextInt();
     while(n-->0)
     {
         int c=sc.nextInt();
         if(c==1)
         s.push(sc.nextInt());
         else if(c==2)
         s.pop();
         else
         getMax(s);
     }        
     } 
    }
    

【问题讨论】:

  • edit 发帖并正确格式化您的代码。 --- "Stack&lt;Integer&gt; s=st;" - 你觉得这行代码是什么?

标签: java function exception stack


【解决方案1】:

但我每次都收到 emptyStack 异常。

因为当你执行stack.pop时,堆栈已经是空的了。

在你的getMax方法中,Stack&lt;Integer&gt; s=st这个操作不会复制栈,也就是说sts引用的是同一个对象,所以你后续的操作会影响到原来的栈。

Stack&lt;Integer&gt; s=st; 更改为Stack&lt;Integer&gt; s= (Stack&lt;Integer&gt;) st.clone();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2016-09-27
    • 2015-02-21
    • 2013-04-14
    • 1970-01-01
    • 2012-10-15
    • 2014-11-29
    相关资源
    最近更新 更多