2016-11-04 14 views
0

我剛開始使用比主要方法更復雜的方法進行編碼。我被賦予了一個用三個硬幣進行比賽的任務。無論哪個投幣順序先擲出2個頭和2個尾巴。我編寫了一個if else語句來確定哪個硬幣獲勝,但是這兩個if語句都沒有執行過。如果您在我的if else語句或其他地方發現錯誤,請告訴我。我還需要其他包含其他方法的代碼程序。如何在Java中連續獲取兩個頭和兩個尾部進行投幣競賽比賽

public class FlipRace 
{ 



public static void main (String[] args) 
    { 
    final int GOALHEAD = 2; 
    final int GOALTAIL = 2; 
    int count1 = 0, count2 = 0, count3 = 0, count10 = 0, count20 = 0, count30 = 0; 

    // Create three separate coin objects 
    Coin coin1 = new Coin(); 
    Coin coin2 = new Coin(); 
    Coin coin3 = new Coin(); 

    while (count1 <= GOALHEAD && count10 <= GOALTAIL || count2 <= GOALHEAD && count20 <= GOALTAIL || count3 <= GOALHEAD && count30 <= GOALTAIL) 
    { 
    coin1.flip(); 
    coin2.flip(); 
    coin3.flip(); 

    // Print the flip results (uses Coin's toString method) 
    System.out.print ("Coin 1: " + coin1); 
    System.out.println (" Coin 2: " + coin2); 
    System.out.println ("  Coin 3: " + coin3); 

    // Increment or reset the counters 
    if (coin1.isHeads()) 
     count1++; 
    else 
     count10++; 
    if (coin2.isHeads()) 
     count2++; 
    else 
     count20++; 
    if (coin3.isHeads()) 
     count3++; 
    else 
     count30++; 
    } 

    // Determine the winner 
    if (count1 == GOALHEAD && count10 == GOALTAIL) 
    System.out.println ("Coin 1 wins!"); 

    else if (count2 == GOALHEAD && count20 == GOALTAIL) 
    System.out.println ("Coin 2 wins!"); 

    else if (count3 == GOALHEAD && count30 == GOALTAIL) 
    System.out.println ("Coin 3 wins!"); 

     else 
     System.out.println ("It's a TIE!"); 


} 
} 

這裏是我的輸出:

Coin 1: Heads Coin 2: Heads 
     Coin 3: Tails 
Coin 1: Heads Coin 2: Heads 
     Coin 3: Heads 
Coin 1: Heads Coin 2: Tails 
     Coin 3: Heads 
Coin 1: Heads Coin 2: Heads 
     Coin 3: Tails 
Coin 1: Heads Coin 2: Tails 
     Coin 3: Heads 
It's a TIE!// this message comes up every time because something is wrong 
+0

我認爲你的循環應該檢查'<'而不是'<='。 – shmosel

+0

當使用<而不是<=時,只有一半的目標有效。 2個尾巴或者2個頭部都可以贏得硬幣,但是我想要一枚硬幣來獲得勝利,因爲它有2個頭部和2個尾部。感謝您的幫助,它幫助我弄清楚了事情。 – Nub

+0

那麼'while((count1 shmosel

回答

0

試着改變你的比較

if (count1 >= GOALHEAD && count10 >= GOALTAIL) 
    System.out.println ("Coin 1 wins!"); 

    else if (count2 >= GOALHEAD && count20 >= GOALTAIL) 
    System.out.println ("Coin 2 wins!"); 

    else if (count3 >= GOALHEAD && count30 >= GOALTAIL) 
    System.out.println ("Coin 3 wins!"); 

     else 
     System.out.println ("It's a TIE!"); 
當然

另一種方法就是簡單地調試代碼,檢查值

+0

感謝您的幫助,您的代碼有點不錯,但我仍然不確定如何按照該順序製作HHTT 。 – Nub

0

我不明白你的代碼如何解決問題。如果我理解正確,您需要第一枚顯示組合H-H-T-T的硬幣。現在,您可以以任何順序計算頭部和尾部。所以,如果第一個硬幣有H-T-H-T,第二個和第三個硬幣分別有H-H-H-T和H-T-T-T,那麼第一個就會贏。

爲了解決在考慮的頭和尾的順序問題,我想你應該改變的if-else語句的每個硬幣(我會讓它只爲了這裏COIN1):

if (coin1.isHeads()) { 
    if (count1 < 2 && count2 == 0) { //less than 2 heads and zero tails 
    count1++; 
    } else { 
    count1 = 0; 
    count10 = 0; 
    } 
} else { //tails 
    if (count1 == 2 && count10 < 2) { //we already have two heads and 0 or 1 tail 
    count10++; 
    } else { // either less than two heads or too many tails - we have to restart! 
    count1 = 0; 
    count10 = 0; 
    } 
} 

你也應該改變while語句......當你有兩個頭和兩個尾巴用於任何硬幣時,你想停下來。因此,它會是這樣的: 而(!(COUNT1 == 2 & & count10 == 2)& &(COUNT2 == 2 & & count20 == 2)& & ......!){。 ..}

+0

我還沒有學會如何將代碼放入coin.flip方法中,使用reset方法並使用coin.wins()。此外,我不認爲我可以使用countHeads和countTails所有的硬幣,因爲我不能有不同的硬幣相同的變量名稱。如果我的理解正確地將代碼放入coin.flip方法中,我是否會使用您發佈的第一個代碼而不是 – Nub

+0

...使用循環? – Nub

+0

堅持下去,我會重寫它來使用一種方法...你可以創建一個新的方法(過程),對不對? – Igor