我正在尝试创建一个程序,从一副牌中随机抽取 5 张牌,并将花色和数值存储在 2 个并行数组中,然后我必须检查是否有重复的牌,如果重复则重新抽取它们。为此,我编写了以下代码:
for (int i = 0; i < suit.length; i++) {
for (int j = 0; j < 5; j++) {
randSuit = rand.nextInt(notSuit.length);
randValue = rand.nextInt(notValue.length);
suit[i] = notSuit[randSuit];
value[i] = notValue[randValue];
firstCards[i] = copyValue[randValue] + " of " + copySuit[randSuit];
}
}
for (int i = 0; i < suit.length; i++) {
for (int j = 1; j < 5; j++) {
if ((suit[i] == suit[j]) && (value[i] == value[j])) { // this if statement will not evaluate to true even when the conditions are true
randSuit = rand.nextInt(notSuit.length);
randValue = rand.nextInt(notValue.length);
suit[i] = notSuit[randSuit];
value[i] = notValue[randValue];
verifiedCards[i] = copyValue[randValue] + " of " + copySuit[randSuit];
}
}
}
底部 2 个 for 循环旨在查看该卡是否重复,如果是,则重新绘制它并将该卡存储在 verifyCards 数组中。相反,它没有运行,并且没有值被放入 verifyCards[] 中。
所以我的问题是,即使存在重复项,它们也不会重新绘制。
示例输出:
未验证 7 俱乐部 黑桃皇后 7 俱乐部 黑桃 7 黑桃 A
已验证 无效的 无效的 无效的 无效的 空
如图所示,梅花 7 是重复的,应该重新抽牌,但事实并非如此,我不明白为什么。
谢谢。
编辑:suit 和 value 是长度为 5 的 int 数组。
最佳答案
因此,当您比较两个不是对象的事物时,使用 ==
运算符将比较值。但是,就像比较两个字符串时一样,您使用 String.equals("hello")
而不是 String == "hello"
当您将对象与 ==
进行比较时,您比较的是存储分配,而不是值。您的程序将检查是否在找到对象 Y 的同一位置找到了对象 X。
因此,要修复您的程序,您只需更改比较所引用的值的方式即可。
关于java - 当条件应该为 true 时,if-else 语句的计算结果不为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60438284/