在下面的代码中,一旦执行,它将根据随机数生成器更改对象diet
的状态hek
。我还有一个undo()
函数,它在运行时工作得非常好。
我要做的是:当对象的状态发生更改,但以前的状态prevdiet
等于更改后的状态currentdiet
时,我希望程序调用undo()
。
import java.util.Random;
import javax.swing.JOptionPane;
public class changeDietCom implements Command {
Hek hek;
Random rand = new Random();
int x;
DietBehaviour prevDiet;
DietBehaviour currentDiet;
public changeDietCom(Hek hek) {
this.hek = hek;
}
public void execute() {
x = rand.nextInt(3) + 1;
prevDiet = hek.getDietBehaviour();
if (x == 1) {
hek.setDietBehaviour(new Enemies());
JOptionPane.showMessageDialog(null, "Hek's diet has been changed!", "Changing diet", JOptionPane.INFORMATION_MESSAGE);
currentDiet = hek.getDietBehaviour();
hek.performDiet();
if (prevDiet == currentDiet) {
JOptionPane.showMessageDialog(null, "Diet hasn't changed!", "Current Diet = Prev Diet", JOptionPane.INFORMATION_MESSAGE);
undo();
}
}
else if (x == 2) {
hek.setDietBehaviour(new ArmouredKnights());
JOptionPane.showMessageDialog(null, "Hek's diet has been changed!", "Changing diet", JOptionPane.INFORMATION_MESSAGE);
currentDiet = hek.getDietBehaviour();
hek.performDiet();
if (prevDiet == currentDiet) {
JOptionPane.showMessageDialog(null, "Diet hasn't changed!", "Current Diet = Prev Diet", JOptionPane.INFORMATION_MESSAGE);
undo();
}
}
else if (x == 3) {
hek.setDietBehaviour(new BigMac());
JOptionPane.showMessageDialog(null, "Hek's diet has been changed!", "Changing diet", JOptionPane.INFORMATION_MESSAGE);
currentDiet = hek.getDietBehaviour();
hek.performDiet();
if (prevDiet == currentDiet) {
JOptionPane.showMessageDialog(null, "Diet hasn't changed!", "Current Diet = Prev Diet", JOptionPane.INFORMATION_MESSAGE);
undo();
}
}
}
public void undo() {
JOptionPane.showMessageDialog(null, "Undoing diet change...", "Undoing Diet Change", JOptionPane.INFORMATION_MESSAGE);
hek.setDietBehaviour(prevDiet);
hek.performDiet();
}
}
但是,只要在运行时上一个状态prevdiet
和当前状态currentdiet
彼此相等,if
语句就不会返回true,我看不出为什么不返回?谁能告诉我为什么和如何解决这个问题吗?
我应该提到的是,我正在使用命令模式来设计程序的这一部分。
使用if(prevDiet==currentDiet){
,可以比较对象引用而不是实际值。请使用if(prevDiet.equals(currentDiet)){
,并确保重写dietBehaviory
的equals()
方法。
请注意,当重写equals()
时,还应该重写hashcode()
,并且实现应该是一致的。有关这方面的更多信息可以在这里找到。
我试着比较两个值 我得到一个错误
首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的
我正在经历一些奇怪的行为,我认为与范围有关,但我不能解释为什么会发生。 但我不明白为什么前面的例子不起作用。我已经读过关于范围的文章,如果在更高的级别上定义了这个变量,应该可以重新分配给它。即使我在函数外定义了isDash,它仍然不起作用。它的值总是保持初始值:false。为什么if语句不将其值更改为true? 正如您所看到的,如果我编写类似的东西来演示是否可以在嵌套的if语句中使用变量,它可以正
我是java编程新手,很难弄清楚这一点。 这是我的代码: 有没有办法将其转换为switch-case语句?
问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路
好吧,我正在使用字典,例如: 然后我想做的基本上是说,如果“用户”(一个参数)的名称前面有“@”,那么将变量前缀分配为“@”,如果他们的名称前面有“~”,则将变量前缀分配为“~”,如果他们有“ 然后我想说,如果用户的名字前面有“%”,则将前缀变量设置为“%”,否则将其设置为“”(因为这些值只有两个键)。为此,我需要一个if语句,并将其与self进行比较。声音的价值。 分配前缀变量的当前代码 目前,