黑马程序员技术交流社区

标题: 增强for循环问题 [打印本页]

作者: 心灵之歌    时间: 2013-8-18 14:55
标题: 增强for循环问题
本帖最后由 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);
                   }
             }
      }

作者: 静以修身    时间: 2013-8-18 15:14
很有可能是因为你在定义ArrayList list的时候没有指定元素的类型,而你在增强for循环里使用的时候没有将list强制转换成Data,你在定义list的时候用泛型试下:ArrayList <Data> list = new <Data> ArrayList();
作者: na_qiang123    时间: 2013-8-18 15:18
for (Data d : list) {
                          System.out.println(d.val);
                   }
里面的d是什么?是不是应该为data?
作者: 深知一生短暂    时间: 2013-8-18 15:23
本帖最后由 深知一生短暂 于 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循环时类型不匹配造成编译错误。用泛型解决问题了
在网吧吖,不容易,什么环境都自己重新配 。   版主。。。。。。。。跪求技术分,等待入学考试。





作者: 深知一生短暂    时间: 2013-8-18 15:56
深知一生短暂 发表于 2013-8-18 15:23
本人帮你修正后的代码:
import java.util.ArrayList;

灰常感谢版主过奖的给力!!本人心存感激,永世难忘。。。。

作者: 米中之玉    时间: 2013-8-18 16:14
  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, 下载次数: 10)

泛型.jpg

作者: 王永贺    时间: 2013-8-18 16:49
楼上已经写的很清楚了  原因就是类型不匹配 所以先前必须用泛型来限制一下。。。
作者: 许云龙    时间: 2013-8-18 17:56
  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.   }
复制代码

作者: 杨增坤    时间: 2013-8-19 23:18
na_qiang123 发表于 2013-8-18 15:18
for (Data d : list) {
                          System.out.println(d.val);
                   }

是list集合中存在Data对象元素!

作者: 杨增坤    时间: 2013-8-19 23:20
如果问题解决了,请把问题的“未解决”更改为"已解决"
谢谢合作!
作者: Lop_adoule    时间: 2013-8-20 19:10
{:soso_e135:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2