-
1.问题(类与对象的练习)
会员类
package demo;
//会员类
public class Vip {
private String vNo; //编号
private int score; //积分
public Vip(String vNo, int score) {
this.vNo = vNo;
this.score = score;
}
public Vip() {
}
public String getvNo() {
return vNo;
}
public void setvNo(String vNo) {
this.vNo = vNo;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
会员操作类
package demo;
import java.util.Arrays;
//会员操作类
public class VipBiz {
//新建会员数组
private Vip[] vips = new Vip[10];
//建立想会员数组中添加会员的方法
public void add(Vip vip) {
for(int i=0; i<vips.length; i++) {
if(vips[i] == null) {
vips[i] = vip;
break;
//添加到一个就可以退出循环,再来一遍
}
}
}
//获得所有会员
/*返回值为对象数组的方法
* 不能直接透露原数组信息,为防止外界引用原数组直接对原数组进行操作
* 而是新建一个数组,外界直接读取新数组中消息
* 新数组与原数组是完全剥离的两个个体,所以外界对新数组操作并不会影响原数组
* 用Arrays.copyOf进行复制,但是新数组长度要+1
* 遍历原数组,新建vip对象通过构造函数复制原数组遍历出的值
* 将原数组中元素从后向前依次放入新数组中
* 最后返回新数组
*/
public Vip[] getVipAll() {
Vip[] newVips = new Vip[0];
for(Vip p : vips) {
if(p != null) {
Vip vip = new Vip(p.getvNo(), p.getScore());
newVips = Arrays.copyOf(newVips, newVips.length + 1);
newVips[newVips.length-1] = vip;
}
}
return newVips;
}
//根据编号获得vip
//返回值是Vip类型变量
/*遍历对象数组,若不为空且编号=输入编号
* 新建Vip类型变量resultVip,将v复制给新变量
* 返回新变量resultVip
*/
public Vip findByNo(String vNo) {
for(Vip v : vips) {
if(v != null && v.getvNo().equals(vNo)) {
Vip resultVip = new Vip(v.getvNo(), v.getScore());
return resultVip;
}
}
return null; //没找到
}
}
主函数
package demo;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
VipBiz vb = new VipBiz();
do {
System.out.print("输入编号:");
String vNo = input.next();
System.out.print("输入积分:");
int score = input.nextInt();
Vip v = new Vip(vNo, score);
vb.add(v);
System.out.print("是否继续:");
}while("y".equals(input.next()));
System.out.println("*****会员列表*****");
System.out.println("编号\t积分");
//通过调用方法,遍历输出复制后的新对象数组的值
//getVipAll()返回值是对象数组
for(Vip v : vb.getVipAll()) {
System.out.println(v.getvNo()+"\t" + v.getScore());
}
System.out.print("输入查找的编号:");
String findNo = input.next();
Vip findVip;
//VIP类型的findVip被复制对象数组调用findByNo
if((findVip = vb.findByNo(findNo)) != null) {
System.out.println("积分为:" + findVip.getScore());
}else {
System.out.println("没找到");
}
}
}
主要注意外界调用原数组的问题