一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 386|回复: 6
收起左侧

[算法题] (新手求助)Implement Queue using Stacks

[复制链接] |试试Instant~ |关注本帖
草袋豆子 发表于 2015-8-31 04:35:01 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
原帖:https://leetcode.com/problems/implement-queue-using-stacks/

题目要求我用stack来模拟一个queue。

我的code如下,同时已高亮我code里出现问题的地方。

说一下我的问题吧:我用stack的pop()和peek()的时候,如果这个stack是empty的话,会出现一个EmptyStackException。我试了try...catch,我发上来的这个版本我用的是throw,但是两者好像没什么用,我submit后系统还是提示“cannot find symbol: class EmptyStackException”


求教各位一下。 非常感谢!



import java.io.*;
class MyQueue {

    Stack<Integer> st = new Stack <Integer> ();

    // Push element x to the back of queue.
    public void push(int x)
    {
        Stack <Integer> st2 = new Stack <Integer>();

        Stack <Integer> st3 = new Stack <Integer>();

        for (int i = 0; i < st.size(); i ++)
        {
            st2.push(st.pop());
        }

        st2.push(x);

        for (int i = 0; i < st2.size(); i ++)
        {
            st3.push(st2.pop());
        }        
        st = st3;
    }

    // Removes the element from in front of queue.
    public void pop()
    {

        st.pop();

      EmptyStackException e = new EmptyStackException();
        
        throw e;
    }

    // Get the front element.
    public int peek()
    {
        return st.peek();

        EmptyStackException e = new EmptyStackException();

        throw e;
    }

    // Return whether the queue is empty.
    public boolean empty()
    {
        if (st.size() == 0) {
            return true;
        }
        else return false;
    }
}



mhwkanon 发表于 2015-8-31 06:28:28 | 显示全部楼层
用 st.isEmpty()判断下就好了.....
throw 不是这么用的,一定要用的话可以这样
if(st.isEmpty()){
   throw  new EmptyStackException();
}
要在出现运行异常前判断或catch
回复 支持 反对

使用道具 举报

 楼主| 草袋豆子 发表于 2015-9-2 04:36:55 | 显示全部楼层
mhwkanon 发表于 2015-8-31 06:28
用 st.isEmpty()判断下就好了.....
throw 不是这么用的,一定要用的话可以这样
if(st.isEmpty()){

感谢回答!

我修改了,如下:
    public void pop()
    {
        if (st.isEmpty())
        {
            throw new EmptyStackException();
        }
        else
        {
            st.pop();
        }
    }

    // Get the front element.
    public int peek()
    {
        if (st.isEmpty())
        {
            throw new EmptyStackException();
        }
        else
        {
            return st.peek();
        }
    }

可是我compile的时候,系统还是提示错误,说cannot find symbol: class EmptyStackException
回复 支持 反对

使用道具 举报

flyaway25 发表于 2015-9-2 04:47:46 | 显示全部楼层
throw exception不声明?或者用try catch来throw
回复 支持 反对

使用道具 举报

Linzertorte 发表于 2015-9-2 05:08:36 | 显示全部楼层
你没有定义这个class...
回复 支持 反对

使用道具 举报

Linzertorte 发表于 2015-9-2 05:09:46 | 显示全部楼层
import java.lang.*;
回复 支持 反对

使用道具 举报

mhwkanon 发表于 2015-9-2 06:02:41 | 显示全部楼层
草袋豆子 发表于 2015-9-2 04:36
感谢回答!

我修改了,如下:

throw exception 要显示声明的,public void ** throws **Exception。
你这个错误有可能是OJ没有引用那个异常的库。你可以试试try {} catch (Exception e),然后不做处理,应该能通过。 另外leetcode 所有题都用不到捕获异常的,用抛出异常处理corner case不是个好习惯,尽量先判断所有可能情况,实在不行再catch 异常。

http://www.programcreek.com/simple-java/
这个网站有一些java的基础知识,建议刷题前看一下。。。。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 14:40

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表