hongji 发表于 2017-4-29 11:44:56

自定义的message方法中数组arr存的值只有最后一个生成的值。

public int empty(Commodity[] arr){//找到空的数组。       
                for(int i=0;i<arr.length;i++){
                        if(arr==null){
                                return i;
                        }
                }
                return 99999;
        }
        public int price(int min,int max){//生成随机数。
                int a=max-min;
                Random ran=new Random();
                int b=ran.nextInt(a);
                b=b+min;
                return b;
        }
        public void message(String name,int min,int max,Commodity[] arr){//生成商品清单。
                Commodity com=new Commodity();
                for(int i=0;i<arr.length;i++){
                        com.setOn(i+1);
                        com.setName(name);
                        com.setPrice(this.price(min,max));
                        arr=com;
                        System.out.println(arr.getOn()+"."+arr.getName()+"\t\t"+arr.getPrice());
                }
        }

hongji 发表于 2017-4-29 11:45:55

上面那段代码中,数组arr存储的值全都是循环最后一个生成的值,何解?

零度非安全 发表于 2017-4-29 14:31:30

请将你的全部源代码发出,不要只发部分,另外请按代码格式发布

零度非安全 发表于 2017-4-29 15:32:36



不知你说的最后一个生成的值是哪个?我这里没问题呀?

hongji 发表于 2017-4-29 16:03:52

你看看,明明添加的是1,但是实际加入数组的是最后一个。

zzzz76 发表于 2017-4-29 18:46:46

把Commodity com=new Commodity(); 放到循环中即可

hongji 发表于 2017-4-29 20:49:09

zzzz76 发表于 2017-4-29 18:46
把Commodity com=new Commodity(); 放到循环中即可

可以了,谢谢。但是为什么放在循环里面就可以了呢?

zzzz76 发表于 2017-4-29 20:57:03

hongji 发表于 2017-4-29 20:49
可以了,谢谢。但是为什么放在循环里面就可以了呢?

数组要储存商品清单,数组元素需要指向不同的com对象,之前代码中所有的数组元素都指向同一个对象,当然储存都的是最后变化的值

hongji 发表于 2017-4-29 21:38:33

zzzz76 发表于 2017-4-29 20:57
数组要储存商品清单,数组元素需要指向不同的com对象,之前代码中所有的数组元素都指向同一个对象,当然 ...

但是,我每生成一个都用循环进行存储了呀。

zzzz76 发表于 2017-4-30 00:26:52

本帖最后由 zzzz76 于 2017-4-30 00:28 编辑

hongji 发表于 2017-4-29 21:38
但是,我每生成一个都用循环进行存储了呀。

储存之后你又改变了该对象,要知道数组元素是引用对象的,这里问题是你没有给每个元素不同的对象,所以你每一次循环都是对所有元素的覆盖,你一直在储存一个值

hongji 发表于 2017-4-30 09:34:10

就是说我的数组arr是指向一个对象的。当我只创建一次的时候,数组里的每个对象都是指向同一个对象吗?但是为什么这个又可以?

hongji 发表于 2017-4-30 09:35:05

zzzz76 发表于 2017-4-30 00:26
储存之后你又改变了该对象,要知道数组元素是引用对象的,这里问题是你没有给每个元素不同的对象,所以 ...


就是说我的数组arr是指向一个对象的。当我只创建一次的时候,数组里的每个对象都是指向同一个对象吗?但是为什么这个又可以?

zzzz76 发表于 2017-4-30 11:14:15

int数组元素为整形变量,arr数组元素为对象引用(指针变量存储对象地址),一个是变量间赋值操作,一个是对对象的引用,两者不能混谈

hongji 发表于 2017-4-30 11:41:03

zzzz76 发表于 2017-4-30 11:14
int数组元素为整形变量,arr数组元素为对象引用(指针变量存储对象地址),一个是变量间赋值操作,一个是对 ...

懂了 前者是对象 后者是引用对吗。但是同是数组如何区分是引用还是对象呢?谢谢你

零度非安全 发表于 2017-5-1 09:24:24

hongji 发表于 2017-4-30 11:41
懂了 前者是对象 后者是引用对吗。但是同是数组如何区分是引用还是对象呢?谢谢你

那你就看这个数组当时声明它是什么类型的,或将数组其中一个元素输出,如果是xxxx@哈希值,则这个是引用类型
页: [1]
查看完整版本: 自定义的message方法中数组arr存的值只有最后一个生成的值。