鱼C论坛

 找回密码
 立即注册
查看: 4508|回复: 14

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

[复制链接]
发表于 2017-4-29 11:44:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
public int empty(Commodity[] arr){//找到空的数组。       
                for(int i=0;i<arr.length;i++){
                        if(arr[i]==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[i]=com;
                        System.out.println(arr[i].getOn()+"."+arr[i].getName()+"\t\t"+arr[i].getPrice());
                }
        }
最佳答案
2017-4-29 18:46:46
把Commodity com=new Commodity(); 放到循环中即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-29 11:45:55 | 显示全部楼层
上面那段代码中,数组arr存储的值全都是循环最后一个生成的值,何解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-29 14:31:30 | 显示全部楼层
请将你的全部源代码发出,不要只发部分,另外请按代码格式发布
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-29 15:32:36 | 显示全部楼层
QQ五笔截图未命名.png

不知你说的最后一个生成的值是哪个?我这里没问题呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-29 16:03:52 | 显示全部楼层
你看看,明明添加的是1,但是实际加入数组的是最后一个。

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

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

新建文件夹.rar

1.35 KB, 下载次数: 2

这是源代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-29 18:46:46 | 显示全部楼层    本楼为最佳答案   
把Commodity com=new Commodity(); 放到循环中即可

评分

参与人数 1荣誉 +5 收起 理由
hongji + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-29 20:49:09 | 显示全部楼层
zzzz76 发表于 2017-4-29 18:46
把Commodity com=new Commodity(); 放到循环中即可

可以了,谢谢。但是为什么放在循环里面就可以了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-29 20:57:03 | 显示全部楼层
hongji 发表于 2017-4-29 20:49
可以了,谢谢。但是为什么放在循环里面就可以了呢?

数组要储存商品清单,数组元素需要指向不同的com对象,之前代码中所有的数组元素都指向同一个对象,当然储存都的是最后变化的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

但是,我每生成一个都用循环进行存储了呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-30 00:26:52 | 显示全部楼层
本帖最后由 zzzz76 于 2017-4-30 00:28 编辑
hongji 发表于 2017-4-29 21:38
但是,我每生成一个都用循环进行存储了呀。


储存之后你又改变了该对象,要知道数组元素是引用对象的,这里问题是你没有给每个元素不同的对象,所以你每一次循环都是对所有元素的覆盖,你一直在储存一个值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-30 09:34:10 | 显示全部楼层
就是说我的数组arr[i]是指向一个对象的。当我只创建一次的时候,数组里的每个对象都是指向同一个对象吗?但是为什么这个又可以?
360截图20170430093035973.jpg
360截图20170430093250448.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


就是说我的数组arr[i]是指向一个对象的。当我只创建一次的时候,数组里的每个对象都是指向同一个对象吗?但是为什么这个又可以?
360截图20170430093250448.jpg
360截图20170430093035973.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-30 11:14:15 | 显示全部楼层
int数组元素为整形变量,arr数组元素为对象引用(指针变量存储对象地址),一个是变量间赋值操作,一个是对对象的引用,两者不能混谈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

懂了 前者是对象 后者是引用对吗。  但是同是数组如何区分是引用还是对象呢?谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-1 09:24:24 From FishC Mobile | 显示全部楼层
hongji 发表于 2017-4-30 11:41
懂了 前者是对象 后者是引用对吗。  但是同是数组如何区分是引用还是对象呢?谢谢你

那你就看这个数组当时声明它是什么类型的,或将数组其中一个元素输出,如果是xxxx@哈希值,则这个是引用类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表