1. 设计要求
实现一个宠物商店,在宠物商店中可以有多种(由用户决定数量)宠物,试表示出此种关系,并要求可以根据宠物的关键字查找到相应的宠物信息。所需要的宠物信息自行设计。
2. 程序分析
1)本要求中提示宠物信息可以自行设计,所以这里简单设计出3个属性:名字、颜色、年龄。
2)宠物的类别很多,如猫、狗等都属于宠物,所以宠物应该是一个标准。
3)在宠物商店中,只要是符合此宠物标准的都可以放进宠物商店中。
4)宠物商店中要保存多种宠物,则肯定应该是一个宠物的对象数组,宠物的个数由用户决定的话,则应该创建宠物商店的时候,就分配好可以保存的宠物个数。
3. 代码
1)展示
2)代码
- Pet.java
interface Pet{
String getName();
String getColor();
int getAge();
}
- Cat.java(具体实现宠物猫)
class Cat implements Pet{ //宠物猫,实现接口Pet
private String name;
private String color;
private int age;
public Cat(String name,String color,int age){ //通过构造设置属性
this.setName(name);
this.setColor(color);
this.setAge(age);
}
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String getName() {
return name;
}
@Override
public String getColor() {
return color;
}
@Override
public int getAge() {
return age;
}
}
- Dog.java(与Cat.java类似)
class Dog implements Pet{ //宠物猫,实现接口Pet
private String name;
private String color;
private int age;
public Dog(String name,String color,int age){ //通过构造设置属性
this.setName(name);
this.setColor(color);
this.setAge(age);
}
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String getName() {
return name;
}
@Override
public String getColor() {
return color;
}
@Override
public int getAge() {
return age;
}
}
- PetShop.java
模糊查找的思路:确定结果数组的大小--》开辟结果数组并存放结果。
此代码是实现了通过姓名、颜色、年龄进行模糊查找。
class PetShop{
private Pet[] pets; //用于存放宠物
private int foot=0; //用于表示添加的下标
public PetShop(int len){ //通过构造方法来确定宠物的个数
if(len>0){
pets=new Pet[len];
}else{
pets=new Pet[1]; //至少开辟一个
}
}
//添加宠物
public boolean add(Pet pet){
if(foot<this.pets.length){ //宠物商店还可存放宠物
this.pets[foot]=pet;
foot++;
return true;
}else{
return false;
}
}
//关键字查找(可通过姓名、颜色和年龄进行模糊查找)
//找到的不一定是一个,所以用Pet数组
public Pet[] search(String keyword){
Pet[] p=null; //声明数组p,用于存放结果
int count=0; //记录有多少个符合条件的结果
for(int i=0;i<this.foot;i++){ //获得符合条件的个数
//indexOf从头开始查找指定的字符串位置,没有返回-1
//int和String类型判断相等与否--》将int类型的变量转换为String类型,然后使用equals()方法进行比较,相同返回true,反之false。
if(this.pets[i].getName().indexOf(keyword)!=-1||this.pets[i].getColor().indexOf(keyword)!=-1||
Integer.toString(this.pets[i].getAge()).equals(keyword)==true)
count++;
}
p=new Pet[count]; //开辟结果数组
int f=0; //记录结果存储到的位置
for(int i=0;i<this.foot;i++){
if(this.pets[i].getName().indexOf(keyword)!=-1||this.pets[i].getColor().indexOf(keyword)!=-1||
Integer.toString(this.pets[i].getAge()).equals(keyword)==true){
p[f]=this.pets[i];
f++;
}
}
return p;
}
}
- Main.java(进行验证)
public class Main {
public static void main(String[] args) {
PetShop ps=new PetShop(5); //5只宠物
ps.add(new Cat("白猫","白色",5)); //添加宠物,均能添加成功(向上转型)
ps.add(new Cat("红猫","红色",2));
ps.add(new Dog("拉布拉多","黄色",1));
ps.add(new Cat("萨摩耶犬","白色",2));
ps.add(new Cat("土狗","棕色",3));
print(ps.search("白"));
}
public static void print(Pet[] p){
for(int i=0;i< p.length;i++){
System.out.println(p[i].getName()+" "+p[i].getColor()+" "+p[i].getAge());
}
}
}
3) 运行结果
将符合要求的全部输出,要注意一点的是在用年龄进行模糊处理的时候,要像这样:
keyword关键字必须是String类型。