如何在Java中连续获取两个头和两个尾部进行投币竞赛比赛

问题描述:

我刚开始使用比主要方法更复杂的方法进行编码。我被赋予了一个用三个硬币进行比赛的任务。无论哪个投币顺序先掷出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

当使用 Nub

+0

那么'while((count1 shmosel

试着改变你的比较

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

我不明白你的代码如何解决问题。如果我理解正确,您需要第一枚显示组合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