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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心灵之歌 中级黑马   /  2013-8-18 14:55  /  1585 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 forward 于 2013-8-21 07:57 编辑

真的不懂,下面这段程序的增强for循环里面的那个list为什么总是报错?
请高手指教。
import java.util.ArrayList;

        class Data {
            int val;
        }

        public class Test {
                  public static void main(String args[]) {
                           Data data = new Data();
                           ArrayList list = new ArrayList();

                   for (int i = 100; i < 103; i++) {
                           data.val = i;
                           list.add(data);
                   }

                    for (Data d : list) {
                          System.out.println(d.val);
                   }
             }
      }

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

10 个回复

倒序浏览
很有可能是因为你在定义ArrayList list的时候没有指定元素的类型,而你在增强for循环里使用的时候没有将list强制转换成Data,你在定义list的时候用泛型试下:ArrayList <Data> list = new <Data> ArrayList();
回复 使用道具 举报
for (Data d : list) {
                          System.out.println(d.val);
                   }
里面的d是什么?是不是应该为data?
回复 使用道具 举报
本帖最后由 深知一生短暂 于 2013-8-18 15:29 编辑

本人帮你修正后的代码:
import java.util.ArrayList;

      public  class Data {
            int val;
      

      
                  public static void main(String args[]) {
                           Data data = new Data();
                           ArrayList<Data> list_1 = new ArrayList<Data>();

                   for (int i = 100; i < 103; i++) {
                           data.val = i;
                           list_1.add(data);
                   }

                    for (Data d : list_1) {
                          System.out.println(d.val);
                   }
             }
       }


运行结果:
C:\Documents and Settings\Administrator\桌面>javac Data.java

C:\Documents and Settings\Administrator\桌面>java Data
102
102
102
你增加元素那,明显存在问题,而你用for循环时类型不匹配造成编译错误。用泛型解决问题了
在网吧吖,不容易,什么环境都自己重新配 。   版主。。。。。。。。跪求技术分,等待入学考试。




评分

参与人数 1技术分 +2 收起 理由
张智文 + 2 淡定 几天多活跃的交流下 技术分大大滴~这.

查看全部评分

回复 使用道具 举报
深知一生短暂 发表于 2013-8-18 15:23
本人帮你修正后的代码:
import java.util.ArrayList;

灰常感谢版主过奖的给力!!本人心存感激,永世难忘。。。。
回复 使用道具 举报
  1. import java.util.ArrayList;

  2. class Data {
  3.     int val;
  4. }

  5. public class Test {
  6.     public static void main(String args[]) {
  7.           Data data = new Data();
  8.           ArrayList<Data> list = new ArrayList<Data>();//为了读取集合中的元素,所以需要用泛型说明元素类型。

  9.           for (int i = 100; i < 103; i++) {
  10.              data.val = i;
  11.              list.add(data);
  12.           }

  13.           for (Data d : list) {//这样编译器就会将list内的元素转换为Data类型来读取而不报错。
  14.             System.out.println(d.val);
  15.           }
  16.     }
  17. }
复制代码

泛型.jpg (43.69 KB, 下载次数: 5)

泛型.jpg

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
楼上已经写的很清楚了  原因就是类型不匹配 所以先前必须用泛型来限制一下。。。
回复 使用道具 举报
  1. /*
  2. 我想说的方法被上面的大神说了,我只能说另一种方法了,建议你使用大神的方法,支持新特性
  3. */
  4. import java.util.ArrayList;

  5. class Data {
  6.     int val;
  7. }

  8. public class classIs4 {
  9.       public static void main(String args[]) {
  10.            Data data = new Data();
  11.            ArrayList list = new ArrayList();

  12.                for (int i = 100; i < 103; i++) {
  13.                        data.val = i;
  14.                        list.add(data);
  15.                }
  16.         
  17.                 for (Object obj : list) {
  18.                         Data d = (Data)obj;  //强转 ,这里和他说的不一样
  19.                     System.out.println(d.val);
  20.                }
  21.      }
  22.   }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
na_qiang123 发表于 2013-8-18 15:18
for (Data d : list) {
                          System.out.println(d.val);
                   }

是list集合中存在Data对象元素!
回复 使用道具 举报
如果问题解决了,请把问题的“未解决”更改为"已解决"
谢谢合作!
回复 使用道具 举报
{:soso_e135:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马