黑马程序员技术交流社区

标题: 执行流程求答 [打印本页]

作者: 曹昌豪    时间: 2012-5-21 13:06
标题: 执行流程求答
class Data {
        int        val;
        int        getVal() {
                return val;
        }
        void        setVal(int val) {
                this.val = val;
        }
}

public class ListTest {

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

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

        int j = 0;
        while (j < list.size()) {
          Data tmp = (Data )list.get(j);
          System.out.println("list(" + j + ") = " + tmp.getVal());
          j++;
        }
  }
}
我想画图解释下,没画过呀,不知道怎么下手了都,哥们们给点意见哈,
作者: Fc10232    时间: 2012-5-21 13:46
  1. package it.itcast.demo;

  2. import java.util.ArrayList;

  3. class Data {
  4.         int val;

  5.         int getVal() {
  6.                 return val;
  7.         }

  8.         void setVal(int val) {
  9.                 this.val = val;
  10.         }
  11. }

  12. public class ListTest {

  13.         public static void main(String argv[]) {
  14.                 Data data = new Data();
  15.                 ArrayList list = new ArrayList();

  16.                 for (int i = 100; i < 103; i++) {
  17.                         data.setVal(i);
  18.                         list.add(data);
  19.                 }

  20.                 int j = 0;
  21.                 while (j < list.size()) {
  22.                         Data tmp = (Data) list.get(j);
  23.                         System.out.println("list(" + j + ") = " + tmp.getVal());
  24.                         j++;
  25.                 }
  26.         }
  27. }
复制代码
1,你没有导包;
2,回答你的问题  ,这个好像没什么值得画图的吧,  j的值你已经规定好了 只能有三个   ,而且输出的内容也for循环也计算出结果了 ,所以最后三次输出的内容都是一样的,
3,输出的结果是:
list(0) = 102
list(1) = 102
list(2) = 102
作者: 李文富    时间: 2012-5-21 15:51
本帖最后由 李文富 于 2012-5-21 15:52 编辑

package cn.itcast.test;

import java.util.ArrayList;
class Data {
        int val;
        int getVal() {
            return val;
        }
        void setVal(int val) {
            this.val = val;
        }
}

public class ListTest {
        public static void main(String argv[]) {

                Data data = new Data();//创建一个Date类实例对象
                ArrayList list = new ArrayList();//创建一个ArrayList集合

                for (int i = 100; i < 103; i++) {
                        data.setVal(i);    //设置data对象Val为i值
                        list.add(data);   
                }                        
  
                int j = 0;
                while (j < list.size()) {   //打印 list中的data对象
                      Data tmp = (Data) list.get(j);
                     System.out.println("list(" + j + ") " +
                                "= " + tmp.getVal());
                     j++;
                }

        }

}

/*注意 你只是创建了一个data对象,list集合存放的是该对象的引用
* for循环中好像是每次调用 setVal(i)设置对象的 val值后存入list,其实
* 最终以最后一次赋值为对象的确定值 ,list只是三次引用了data对象。
* 故打印出的结果都是 102*/






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