自定义的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());
}
} 上面那段代码中,数组arr存储的值全都是循环最后一个生成的值,何解? 请将你的全部源代码发出,不要只发部分,另外请按代码格式发布
不知你说的最后一个生成的值是哪个?我这里没问题呀? 你看看,明明添加的是1,但是实际加入数组的是最后一个。 把Commodity com=new Commodity(); 放到循环中即可 zzzz76 发表于 2017-4-29 18:46
把Commodity com=new Commodity(); 放到循环中即可
可以了,谢谢。但是为什么放在循环里面就可以了呢? hongji 发表于 2017-4-29 20:49
可以了,谢谢。但是为什么放在循环里面就可以了呢?
数组要储存商品清单,数组元素需要指向不同的com对象,之前代码中所有的数组元素都指向同一个对象,当然储存都的是最后变化的值 zzzz76 发表于 2017-4-29 20:57
数组要储存商品清单,数组元素需要指向不同的com对象,之前代码中所有的数组元素都指向同一个对象,当然 ...
但是,我每生成一个都用循环进行存储了呀。 本帖最后由 zzzz76 于 2017-4-30 00:28 编辑
hongji 发表于 2017-4-29 21:38
但是,我每生成一个都用循环进行存储了呀。
储存之后你又改变了该对象,要知道数组元素是引用对象的,这里问题是你没有给每个元素不同的对象,所以你每一次循环都是对所有元素的覆盖,你一直在储存一个值 就是说我的数组arr是指向一个对象的。当我只创建一次的时候,数组里的每个对象都是指向同一个对象吗?但是为什么这个又可以? zzzz76 发表于 2017-4-30 00:26
储存之后你又改变了该对象,要知道数组元素是引用对象的,这里问题是你没有给每个元素不同的对象,所以 ...
就是说我的数组arr是指向一个对象的。当我只创建一次的时候,数组里的每个对象都是指向同一个对象吗?但是为什么这个又可以? int数组元素为整形变量,arr数组元素为对象引用(指针变量存储对象地址),一个是变量间赋值操作,一个是对对象的引用,两者不能混谈 zzzz76 发表于 2017-4-30 11:14
int数组元素为整形变量,arr数组元素为对象引用(指针变量存储对象地址),一个是变量间赋值操作,一个是对 ...
懂了 前者是对象 后者是引用对吗。但是同是数组如何区分是引用还是对象呢?谢谢你 hongji 发表于 2017-4-30 11:41
懂了 前者是对象 后者是引用对吗。但是同是数组如何区分是引用还是对象呢?谢谢你
那你就看这个数组当时声明它是什么类型的,或将数组其中一个元素输出,如果是xxxx@哈希值,则这个是引用类型
页:
[1]