ArrayList实践:Farmacy类中过敏原匹配方法实现求助
帮你实现药房系统的过敏原检查方法
嘿,刚好我之前也做过类似的练习,咱们一步步来搞定这个需求~
首先得先明确各个类的基础结构,这样后面的方法实现才清晰:
1. 先定义基础类
Person类(含过敏信息)
假设Person类里有一个表示是否对目标过敏原过敏的属性(如果你的需求是多种过敏原,也可以改成集合,但先按你提到的boolean类型匹配逻辑来写):
public class Person { // 标记该用户是否对这类过敏原过敏 private boolean hasAllergy; // 构造器与getter方法 public Person(boolean hasAllergy) { this.hasAllergy = hasAllergy; } public boolean isHasAllergy() { return hasAllergy; } }
Drug类(含allergen属性)
每个药物用boolean类型标记是否含有过敏原:
public class Drug { private boolean allergen; public Drug(boolean allergen) { this.allergen = allergen; } public boolean isAllergen() { return allergen; } }
Medicine类(包含两种药物)
药品固定包含两种药物,这里提供一个转成List的方法,方便后续统一遍历:
import java.util.ArrayList; import java.util.List; public class Medicine { private Drug drug1; private Drug drug2; public Medicine(Drug drug1, Drug drug2) { this.drug1 = drug1; this.drug2 = drug2; } // 返回药品包含的所有药物,方便遍历检查 public List<Drug> getDrugs() { List<Drug> drugs = new ArrayList<>(); drugs.add(drug1); drugs.add(drug2); return drugs; } }
2. 实现Farmacy类的核心检查方法
Farmacy类持有药品列表,重点实现那个接收Person和Medicine的过敏原检查方法:
import java.util.ArrayList; import java.util.List; public class Farmacy { // 药房的药品库存列表 private List<Medicine> medicineList; public Farmacy() { this.medicineList = new ArrayList<>(); } // 可选:添加药品到库存的方法 public void addMedicine(Medicine medicine) { medicineList.add(medicine); } // 核心方法:检查目标药品是否存在与用户过敏匹配的过敏原 public boolean checkAllergy(Person person, Medicine targetMedicine) { // 如果用户本身没有过敏情况,直接返回无风险 if (!person.isHasAllergy()) { return false; } // 遍历目标药品里的所有药物 for (Drug drug : targetMedicine.getDrugs()) { // 只要有一个药物含过敏原,就判定为有过敏风险 if (drug.isAllergen()) { return true; } } // 所有药物都不含过敏原,返回无风险 return false; } }
3. 关键逻辑说明
- 前置判断:先检查用户是否有过敏体质,如果用户本身不过敏,不管药品有没有过敏原都不会触发风险,直接返回
false。 - 遍历检查:把药品的两种药物转成List统一遍历,这样以后如果药品的药物数量扩展(比如改成3种),这个方法不用大改。
- 匹配逻辑:只要药品里存在任意一种含过敏原的药物,且用户有过敏体质,就返回
true表示存在过敏风险。
4. 测试示例(可选)
可以写个main方法验证功能:
public class Main { public static void main(String[] args) { // 创建两类用户:过敏/非过敏 Person allergicUser = new Person(true); Person normalUser = new Person(false); // 创建两类药物:含过敏原/不含 Drug allergenDrug = new Drug(true); Drug safeDrug = new Drug(false); // 创建两类药品:含风险/完全安全 Medicine riskyMed = new Medicine(allergenDrug, safeDrug); Medicine safeMed = new Medicine(safeDrug, safeDrug); // 初始化药房 Farmacy farmacy = new Farmacy(); farmacy.addMedicine(riskyMed); farmacy.addMedicine(safeMed); // 测试检查方法 System.out.println(farmacy.checkAllergy(allergicUser, riskyMed)); // 输出true System.out.println(farmacy.checkAllergy(allergicUser, safeMed)); // 输出false System.out.println(farmacy.checkAllergy(normalUser, riskyMed)); // 输出false } }
如果你的需求里Person的过敏信息是多种类型(比如对花粉、青霉素等不同过敏原过敏),可以把Person的hasAllergy改成Set<String> allergicSubstances,Drug的allergen改成String allergenType,然后检查逻辑变成判断药物的过敏原是否在用户的过敏集合里就行,这个可以根据实际需求灵活调整~
内容的提问来源于stack exchange,提问作者Bautista Querejeta
相关产品推荐
相关产品推荐

