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

关于类的实例化和指针的一个问题
题目:添加会员、显示会员和查找会员
问题:
//如果把下行代码放在循环前面,那么显示会员时会员总是最后注册的那一个,为什么?请解释原理(好像和指针和内存有关),最好有图。(为什么要在循环里面实例化会员类)  
cust=new Customer(); (在测试类的循环里)
  

会员属性类:
package Classwork;

public class Customer {
String customerNo;
int customerScore;
}


会员操作类:
package Classwork;

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 showCustomers(){
System.out.println("********************会员编号************************");
System.out.println("编号\t积分");
for(int i=0;i<customers.length;i++){
if(customers[i]!=null){
System.out.println(customers[i].customerNo+"\t"+customers[i].customerScore);
}
}
}
//查找会员
public int searchCust(String customerNo){
int score=-1;
int i=0;
while(customers[i]!=null){
if(customers[i].customerNo.equals(customerNo)){
score = customers[i].customerScore;
break;
}
i++;
}
return score;
}
}

测试类:
package Classwork;

import java.util.Scanner;

public class TestC1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Customer cust;
CustManager custmanager=new CustManager();
Scanner input =new Scanner(System.in);
//循环添加会员
boolean con =true;
while(con){
  //如果把这行代码放在循环前面,那么显示会员时会员总是最后注册的那一个,为什么? cust=new Customer();  
  System.out.print("请输入会员编号:");
cust.customerNo=input.next();
System.out.print("请输入会员积分:");
cust.customerScore=input.nextInt();
custmanager.add(cust);
System.out.println("是否继续?");
String answer=input.next();
if(!answer.equals("y")){
con=false;
}
}
//显示会员
custmanager.showCustomers();
//查找会员
System.out.print("请输入要查找的会员编号:");
String customerNo=input.next();
int s=custmanager.searchCust(customerNo);
if(s!=-1){
System.out.print("该会员积分为:"+s);
}else{
System.out.print("不存在该会员!");
}
}
}


------解决方案--------------------
你在循环外面定义了一个cus,在每次循环new Customer()的时候,cus指向不同的地址,但是cus是唯一的,也就是你循环了N次之后,加入到数组中的只是唯一且没有改变的cus,而cus最后指向的是你while()循环的最后一次new出来的Customer,所以显示的时候就显示了最后一个添加的Customer。
------解决方案--------------------
探讨

能给我画个内存和指针的图吗?