首页 > 解决方案 > 在验证中检查多个条件

问题描述

这是实现的完整抽象类。我想知道是否有一种方法可以在攻击和战士等级为 0 的情况下返回两个异常。我想在这种情况下显示两条消息,但如果我只单独测试它们中的每一个,我似乎无法在异常中抛出第二条消息。例如,如果我测试攻击 <= 0 那么它应该告诉我“攻击不能为零”,但是如果攻击 <= 0 并且防御 <=0 它应该告诉我“攻击不能为零。防御不能为零”我想要要做到这一点,而无需为每种可能性设置 if 条件,因为当添加更多可能性时,它会变得混乱。

public abstract class Warrior {

public int level;
public int attack;
public int defense;

public abstract int getLevel();

public abstract int getAttack();

public abstract int getDefense();

public static abstract class Builder {

    public Warrior warrior;

    public Builder attack(int attack) {
        return this;
    }

    public Builder defense(int defense) {
        return this;
    }

    public Warrior build() {
        return warrior;
    }

    public void validate(Warrior W) {

        if (W.level <= 0 && W.attack > 0 && W.defense > 0) {
            throw new IllegalStateException("Level must be greater than 0. ");

        } else if (W.defense <= 0 && W.attack > 0 && W.level > 0) {
            throw new IllegalStateException("Defense must be greater than 0. ");

        } else if (W.attack <= 0 && W.defense > 0 && W.level > 0) {
            throw new IllegalStateException("Attack must be greater than 0. ");

        } else if (W.attack <= 0 && W.level <= 0 && W.defense > 0) {
            throw new IllegalStateException("Level must be greater than 0. Attack must be greater than 0. ");

        } else if (W.level <= 0 && W.defense <= 0 && W.attack > 0) {
            throw new IllegalStateException("Level must be greater than 0. Defense must be greater than 0. ");

        } else if (W.level <= 0 && W.defense <= 0 && W.attack <= 0) {
            throw new IllegalStateException(
                    "Level must be greater than 0. Attack must be greater than 0. Defense must be greater than 0. ");
        }

    }
}

}

标签: java

解决方案


您可以自行检查每个条件,并将所需的子消息附加到结果消息中,如果消息的长度 > 0,则抛出异常。类似于:

public void validate(Warrior W) {
    String message = "";
    if (W.level <= 0) {
        message += "Level must be greater than 0. ";
    }
    if (W.defense <= 0) {
        message += "Defense must be greater than 0. ";
    }
    if (W.attack <= 0) {
         message += "Attack must be greater than 0. ";
    }
    if (!message.isEmpty()) {
        throw new IllegalStateException(message);
    } 
    else {                   
        //do whatever
    }
}

推荐阅读