You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:04:12