Java 检查数组的值是否相等

Java 检查数组的值是否相等,java,Java,我正在创建一个程序,生成一个数字序列,并将其值存储到一个双精度数组中。基本上,它是一个随机输出4个骰子的计算器,带有一个布尔测试条件来检查所有四个骰子值是否相同。随后将出现一条胜利消息 有人能帮我写下这个代码吗?我对Java非常陌生:)是的,它在Java上 字符串的方法也是具体的,所以我不需要担心 private int[] sequence = { 1, 1, 1, 1 }; // this is just an example ... public boolean areTheseDiceE

我正在创建一个程序,生成一个数字序列,并将其值存储到一个双精度数组中。基本上,它是一个随机输出4个骰子的计算器,带有一个布尔测试条件来检查所有四个骰子值是否相同。随后将出现一条胜利消息

有人能帮我写下这个代码吗?我对Java非常陌生:)是的,它在Java上

字符串的方法也是具体的,所以我不需要担心

private int[] sequence = { 1, 1, 1, 1 }; // this is just an example
...
public boolean areTheseDiceEqual()
{
// No idea how to go about this
}

任何帮助都将不胜感激

发布伪代码答案只是一个算法,根据需要修改和测试:

public boolean haveDuplicates(double[] dices1, double[] dices2)
{
    boolean has_duplicates = false;
    for (int i=0; i<dices1.length; i++)
    {
       double dice1 = dices1[i];
       for (int j=0; j<dices2.length; j++)
       { 
            double dice2 = dices2[j];
            if ( dice1 == dice2 )
            {
                 has_duplicates = true;
                 break; // stop checking any more
            }
       }
       if (has_duplicates) break; // stop checking any more
    }
    return has_duplicates;
}
public boolean haveDuplicates(双[]骰子1,双[]骰子2)
{
boolean has_duplicates=false;
对于(int i=0;i

我想没有比这更优雅的方法了。

尝试遍历数组:

double previous = sequence[0];
for(int i =1; i < sequence.length; i++){
    if(sequence[i] != previous) 
         return false;
    previous = sequence[i];
}
return true;
double-previous=序列[0];
for(int i=1;i

如果需要,这应该适用于多于4个元素的数组。

您可以存储数组第一个位置的变量,并在后面位置的任何值不具有相同值时返回false

public boolean areTheseDiceEqual() {
    double firstDie = -1;
    for(oneDie : sequence) {
        firstDie = (firstDie == -1 ? oneDie : firstDie);
        if(firstDie != oneDie) {
            return false;
        }
    }
    return true;
}

我们不需要看前面的骰子,因为第一个差值足以返回false,所以您可以简单地这样写:

private boolean areTheseDiceEqual(){
    int firstShot=shots[0];
    for (int i = 1; i < shots.length; i++) {
        if(firstShot!=shots[i]){
            return false;
        }
    }
    return true;
}

我想应该注意的是,代码应该比较序列中的每个值,以便使用某种形式的for循环。如果有人回答这个问题,您能否解释一下您是如何获得结果的?我想学习!提示:
sequence[0]
是第一个元素,
sequence[1]
第二个,等等;您应该在这里使用
int
,而不是
double
;您可以比较两个
int
是否与
=
相等,如果只有
s[1]
s[3]
是平等的吗?@NikosM。然后这个表达是
错误的
,我认为这是OP想要的,尽管标题是这样的。这很有魅力,我也理解它。它很聪明。我经常发现很难想象我想做什么,但像你这样的人却能很快地把它从你的脑袋里弄出来。非常感谢你!我也是我也很喜欢这个答案^:)很好。如果序列没有长度,这种方法不会抛出错误。@ericbn它的工作原理是假设两个不同的骰子序列被检查是否重复,不清楚哪个检查是不需要的,所以添加了这个,如果需要,我可以修改它。要看它是否工作,只需分析他想要检查的算法“如果所有四个骰子值相同".看ste fu的答案…@ericbn,好吧,我看到了这个,所以这个答案是关于寻找重复的,问题的标题不清楚,但我留下它,以防有人发现它有用,它已经提到了,这是它假设的。好吧,检查两个骰子数组中是否有一个重复的值肯定不会检查
areTheseDiceEqual
…@ericbn,足够公平,编辑答案
private boolean areTheseDiceEqual(){
    int firstShot=shots[0];
    for (int i = 1; i < shots.length; i++) {
        if(firstShot!=shots[i]){
            return false;
        }
    }
    return true;
}
@Test
public void test1(){
    shots(1,2,3,4);
    assertFalse(areTheseDiceEqual());
}

@Test
public void test2(){
    shots(1,1,1,1);
    assertTrue(areTheseDiceEqual());
}

@Test
public void test3(){
    shots(1,1,1,4);
    assertFalse(areTheseDiceEqual());
}

@Test
public void test4(){
    shots(1,2,2,2);
    assertFalse(areTheseDiceEqual());
}

public void shots(int... shots){
    this.shots=shots;
}