2015-04-12 91 views
-4

我正在創建一個程序,該程序生成一系列數字並將其值存儲到雙精度數組中。基本上它是一個計算器,將隨機輸出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 
} 

任何幫助將不勝感激!

+0

我想應該指出,代碼應該比較序列中的每個值,所以它會使用某種for循環。如果有人回答這個問題,你能否提供一個解釋,說明你如何取得成果?我樂意去學! – Kapoolu

+1

提示:「序列[0]」是第一個元素,「序列[1]」是第二個等;你應該在這裏使用'int',而不是'double';你可以比較兩個'int'與'=='的相等性 – 2015-04-12 14:23:22

回答

-1

張貼僞代碼的回答只是一個算法,修改和測試需要:

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; 
} 

這個答案假設(從標題,準確的問題不太清楚),你有2個骰子的不同序列並且要檢查它們是否包含重複值

我們可以做到這一點更有效,如果使用另一種結構或值進行排序上升,試圖找到這些其他信息途徑

+0

@ericbn它的工作原理與假設一樣,兩個不同的骰子序列被檢查重複,不清楚形式的問題,檢查是不需要的,所以添加了這個,如果需要的話,我可以修改它。爲了看到它的效果,只分析算法 –

+0

他想檢查「如果所有四個骰子值是相同的」。看到ste-fu的回答... – ericbn

+0

@ericbn,好的,我看到了這個,所以這個答案是關於找到重複的,問題的標題不明確,但我要離開它,以防萬一有人發現它有用,已經提到這是它假設的 –

0
public boolean areTheseDiceEqual(double[] s) { 
    return (s[1] == s[2] && s[2] == s[3] && s[3] == s[4]) 
} 

我想沒有更優雅的方式。

+0

如果只有'[1]'和'[3]'是相等的呢? –

+0

@NikosM。那麼表達式就是'假' – ericbn

+0

我認爲這是OP要求的,儘管標題。 – natario

3

嘗試通過陣列進行迭代:

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

如果需要的話這應該遠遠超過4個元素數組。

+0

這工作就像一個魅力,我也瞭解它。這很聰明。我經常發現很難直觀地看到我想要做什麼,但是像你這樣的人能夠如此迅速地將它從你的腦海中捲走。非常感謝! – Kapoolu

3

只要稍後位置中的任何值不具有相同的值,就可以存儲位於數組第一位置的變量並返回false。

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

我也很喜歡這個答案^ :) – Kapoolu

+0

好。如果序列沒有長度,這種方式不會拋出錯誤。 –

0

我們不需要看以前的骰子作爲第1差足以返回false所以你可以寫它只是這樣的:剛

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

測試了4次JUnit測試,它工作:)

@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; 
}