A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲁行 中级黑马   /  2014-10-5 20:20  /  1919 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
        需求: 模拟堆栈数据结构,该数据结构的特点是:先进后出.       
*/

import java.util.*;

//定义一个自定义的类MyStack<T>来实现堆栈数据结构
class MyStack<T>
{
        //内部封装一个LinkedList对象
        private LinkedList<T> list;
        public MyStack()
        {
                list = new LinkedList<T>();
        }
        //自定义一个添加方法
        public void myAdd(T t)
        {
                list.addFirst(t);
        }
        //自定义一个获取方法
        public T get(int index)
        {
                return list.get(index);
        }
        //自定义一个获取集合长度的方法
        public int mySize()
        {
                return list.size();
        }
        //获取迭代器
        public Iterator myIterator()
        {
                return list.iterator();
        }
        //获取List迭代器.
        public ListIterator myListIterator()
        {
                return list.listIterator();
        }
       
}
//测试类
class MyStackDemo
{
        public static void main(String[] args)
        {
                //创建对象
                MyStack<String> ms = new MyStack<String>();
               
                //添加元素
                ms.myAdd("1");
                ms.myAdd("2");
                ms.myAdd("3");

                //普通for遍历
                for (int i=0 ;i<ms.mySize() ;i++ )
                {
                        String s = ms.get(i);
                        System.out.println(s);
                }
                //迭代器遍历
                for (Iterator it = ms.myIterator();it.hasNext() ; )
                {
                        String s = (String)it.next();
                        System.out.println(s);
                }
                //增强for遍历(foreach),但是报错了.
                //编译时报下面的错误.
                //MyStackDemo.java:71: 错误: for-each 不适用于表达式类型
                for(String s : ms)
                {
                        System.out.println(s);
                }
        }
}

/*
        问题:定义了一个返回的迭代器方法,为什么用增强for遍历的时候还会出错.
               
        求大神解决.
*/

7 个回复

倒序浏览
高级for循环只能遍历集合和数组,你继承个集合试试
回复 使用道具 举报
水竹 发表于 2014-10-5 20:25
高级for循环只能遍历集合和数组,你继承个集合试试

为了这个功能就去继承集合,这个可以,但是不符合实际啊,不能为了某个功能而去继承.

高级for循环底层不是调用的Iterator么?按道理说只要返回了迭代器不是就可以使用增强for了么?

难道是要实现Iterator接口才可以么?
回复 使用道具 举报
鲁行 发表于 2014-10-5 20:36
为了这个功能就去继承集合,这个可以,但是不符合实际啊,不能为了某个功能而去继承.

高级for循环底层不是 ...

哪有什么按理说,遇到高级for循环的时候Java编译器是怎么处理的只有看相关文档才能百分百确定吧,说不定人家就是判断了一下你是不是集合、是不是数组,要都不是的话就不给你编译。
而且既然报了那个异常的话,肯定是说明不是集合或数组的话不行啊,至于不想为了功能去继承集合的话也可以,可以在类里面封装一个集合,然后编写一个可以返回这个集合的方法,然后再用高级for循环就可以了;
或者为啥非要用高级for循环,既然已经有了迭代器,那就用迭代器迭代好了。
回复 使用道具 举报
你将高级For循环中的String改成Object试试
回复 使用道具 举报
  要求: 数组或 java.lang.Iterable
我试了一下,报的异常里面是这么说的,你实现一下那个接口应该就行了
回复 使用道具 举报
鲁行 中级黑马 2014-10-5 20:55:16
7#

ok了,实现接口可以.
回复 使用道具 举报
沙发,水一贴
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马