0

我正在做 GlassFish 安装附带的 Java EE7 教程。它也可以在这里找到。代码位于 glassFish 服务器安装目录中

/glassFish_installation/glassfish4/docs/javaee-tutorial/examples/cdi/guessnumber-cdi.

代码可以正常工作。它目前在用户正确猜到数字时显示,但在游戏结束时correct!不显示。failed所以我介绍了,只需一个小改动即可显示failed消息。我在代码的相关更改上方添加了注释。

不知何故,这种变化并没有帮助。即,在游戏结束时,failed不显示消息。但是游戏照常进行。我想知道为什么这不起作用以及如何纠正它?

谢谢

public class UserNumberBean implements Serializable {

    private static final long serialVersionUID = -7698506329160109476L;

private int number;
private Integer userNumber;
private int minimum;
private int remainingGuesses;
@Inject
@MaxNumber
private int maxNumber;
private int maximum;
@Inject
@Random
Instance<Integer> randomInt;

public UserNumberBean() {
}

public int getNumber() {
    return number;
}

public void setUserNumber(Integer user_number) {
    userNumber = user_number;
}

public Integer getUserNumber() {
    return userNumber;
}

public int getMaximum() {
    return (this.maximum);
}

public void setMaximum(int maximum) {
    this.maximum = maximum;
}

public int getMinimum() {
    return (this.minimum);
}

public void setMinimum(int minimum) {
    this.minimum = minimum;
}

public int getRemainingGuesses() {
    return remainingGuesses;
}

public String check() throws InterruptedException {
    if (userNumber > number) {
        maximum = userNumber - 1;
    }
    if (userNumber < number) {
        minimum = userNumber + 1;
    }
    if (userNumber == number) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage("Correct!"));
    }

    //if remainingGuesses is less than or equal to zero, display failed message
    //-----------------------------------------------
    if (remainingGuesses-- <= 0) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage("failed "));
    }
    return null;
}

@PostConstruct
public void reset() {
    this.minimum = 0;
    this.userNumber = 0;
    this.remainingGuesses = 10;
    this.maximum = maxNumber;
    this.number = randomInt.get();
}

public void validateNumberRange(FacesContext context,
        UIComponent toValidate,
        Object value) {
    int input = (Integer) value;

    if (input < minimum || input > maximum) {
        ((UIInput) toValidate).setValid(false);

        FacesMessage message = new FacesMessage("Invalid guess");
        context.addMessage(toValidate.getClientId(context), message);
    }
}
}
4

1 回答 1

1

添加 FacesMessage 实际上是有效的,问题是你在你的情况下使用了 postdecrement。

Postdecrement,顾名思义,在执行包含 postdecrement 的语句后递减。

这意味着,如果你写:

if (remainingGuesses-- <= 0) {

remainingGuesses在评估 if 条件后,var会递减。

在您的情况下,当检查最后一个猜测时,remainingGuesses实际上是 1,因此 if 条件不是true,并且没有添加消息。

不同的明显解决方案:

    if (remainingGuesses-- <= 1) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage("failed "));
    }

或者

    if (--remainingGuesses <= 0) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage("failed "));
    }

或者

    remainingGuesses--;
    if (remainingGuesses <= 0) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage("failed "));
    }

也可以看看:

于 2014-10-04T01:51:29.863 回答