创建自定义类水果,要求包含水果名称、单价、产地等属性
创建自定义类水果,要求包含水果名称、单价、产地等属性
使用HashSet存储水果,并提供equals方法和hashCode方法使用水果的名称属性判定水果是否相同,使用迭代器输出
首先我们创建一个标准的水果类
既JavaBean水果类
package com.hzyc.lesson1205;
public class Fruit {
private String Name;
private int price;
private String Address;
//写一下Fruit的有参构造方法
Fruit(String Name, int price, String Address) {
this.Name = Name;
this.price = price;
this.Address = Address;
}
//重写hashCode方法,便于初步比较对象
@Override
public int hashCode() {
return this.price;
}
//这是比对的最后一道关卡
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o.getClass() == this.getClass()) {
Fruit f = (Fruit) o; //让对象o转换成为Fruit类型的东西,才能进行下一步的比较
return f.Name.equals(this.Name);
}
return false;
}
//重写toString方法,便于对象的字符串化
@Override
public String toString() {
return "Fruit{" +
"Name='" + Name + '\'' +
", price=" + price +
", Address='" + Address + '\'' +
'}';
}
//标准类的get/set方法
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
}
编写对水果的管理类
根据题目要求,我们需要一个类来管理这些水果们,所以我们要编写水果管理类:class FruitManager。
①首先我们需要写上HashSet集合来管理fruit类,采用static对它进行修饰,让他成为一个共享的集合;
②之后再编写添加水果的方法addFruit();增删改查都是一般的管理手段,在这里我们只写了增加的办法,还没有对其他的办法进行补充;
③既然我们对它进行管理,那么我们也必须要有将这个集合输出的方法,毕竟程序就是要展示出来给人看的,别人才知道集合里面有什么,我们需要将它写出来,不然人们总是好奇,你这个集合里面写的到底是什么东西。对于集合,我们采用的是iterator方法输出。
④我们在addFruit里面还写了try/catch方法,主要是为了防止手抖输入错误,从而导致一下子程序输入异常程序跳出。
package com.hzyc.lesson1205;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
public class FruitManager {
//在这里写上HashSet集合来管理fruit类,我们采用static对它进行修饰
static HashSet<Fruit> fruitList = new HashSet<Fruit>();
void addFruit() {
System.out.println("请按指定的格式添加水果:【水果名-单价-产地】");
Scanner sc = new Scanner(System.in);
boolean continueOrNot = true;
while (continueOrNot) {
try {
String str = sc.next();
String[] strArr = str.split("-");
Fruit f = new Fruit(strArr[0], Integer.parseInt(strArr[1]), strArr[2]);
fruitList.add(f);
continueOrNot = false;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("请按照格式重新输入。");
}
}
}
void print() {
Iterator<Fruit> iter = fruitList.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
工作流
主要是为了迭代,更新够快
在这里我们也写了try/catch方法,还是为了防止手抖输入错误,从而导致一下子程序输入异常程序跳出。用户白白添加输入半天对象,结果程序崩了,那用户不得挺崩溃的嘛-_-|||
package com.hzyc.lesson1205;
import java.util.InputMismatchException;
import java.util.Scanner;
public class WorkFlow {
void star() {
FruitManager mgr = new FruitManager();
folwOut:
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你需要什么?\n" +
"1.查看当前水果\n" +
"2.添加水果\n" +
"3.退出请输入Q\n");
try {
int choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("当前水果共有:");
mgr.print();
break;
case 2:
mgr.addFruit();
break;
case 3:
System.out.println("正在退出……");
break folwOut;
}
} catch (InputMismatchException e) {
System.out.println("输入有误,请选择对应的选项。");
}
}
}
}
最后是测试类
public class test {
public static void main(String[] args) {
WorkFlow fruit = new WorkFlow();
fruit.star();
}
}