java - 当条件应该为 true 时,if-else 语句的计算结果不为 true

标签 java arrays if-statement

我正在尝试创建一个程序,从一副牌中随机抽取 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/

相关文章:

c - 将整数放入 4 个字符数组元素中

java - if语句中的代码突然离开

python - 在 pandas/python 中嵌套带有 .loc 的 if 语句

Excel公式为依赖于其他2列(名字和姓氏)的列分配唯一值?

Java显示不显示整个方法

java - 如何使用递归树估计生成字符串排列的时间复杂度

c++ - 元素组成递增整数集的最长子序列

java - ExecutorService - 如何以非阻塞方式等待所有任务完成

java - EasyMock捕获: use getValue() outside of an IAnswer

Java - 访问全局变量和数组