日期:2014-05-20  浏览次数:20631 次

java求助。。。大侠帮忙找找错误
public class Customer {
int custNo=0;
int point=0;
}



public class CustManager {
Customer[] customers = new Customer[100];

public void add(Customer cust){

for(int i=0;i<customers.length;i++){
if(customers[i]==null){
customers[i]=cust;
break;
}
}
}

public void show(){
System.out.println("编号\t积分");
for(int i=0;i<customers.length;i++){
if(customers[i]==null)
break;
System.out.println(customers[i].custNo+"\t"+customers[i].point);
}
}

}



import java.util.Scanner;

public class TestCustomer {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
Customer cust=new Customer();
CustManager custm=new CustManager();

for(int j=0;j<100;j++){
System.out.print("请输入会员编号:");
cust.custNo=sc.nextInt();
System.out.print("请输入会员积分:");
cust.point=sc.nextInt();
custm.add(cust);
if(cust.point==0)
break;


}
custm.show();



}

}


当积分输入为0时,退出输入,显示输入的卡号和积分、、、
输出错误结果:


------解决方案--------------------
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
Customer cust=new Customer();
CustManager custm=new CustManager();

for(int j=0;j<100;j++){
System.out.print("请输入会员编号:");
cust.custNo=sc.nextInt();
System.out.print("请输入会员积分:");
cust.point=sc.nextInt();
custm.add(cust);
if(cust.point==0)
break;
这段代码中只new出了一个Customer 对象cust,在每次调用add()方法时,
都是把cust的内存地址传递给cumstom[i],换句话说就是数组customers的每个元素指向同一个内存地址,
每个元素的custno和point都会一样。无论怎么添加,数组的元素都会是最后添加的那个。
------解决方案--------------------
for循环里操作的Customer对象一直是同一个,导致后来的输入把前面的输入都覆盖了。解决办法很简单,把创建Customer对象的语句放到for循环中就行了。如图:

------解决方案--------------------
for(int j=0;j<100;j++){
Customer cust=new Customer();
System.out.print("请输入会员编号:");
cust.custNo=j;
System.out.print("请输入会员积分:");
cust.point=j+1;
custm.add(cust);
custm.show();
if(cust.point==0)
break;


}