如何在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
试着改变你的比较
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!");
当然
另一种方法就是简单地调试代码,检查值
感谢您的帮助,您的代码有点不错,但我仍然不确定如何按照该顺序制作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)& & ......!){。 ..}
我认为你的循环应该检查' shmosel
当使用 Nub
那么'while((count1
shmosel