Java硬币翻转计划

时间:2016-09-15 21:35:33

标签: java

我正在尝试编写一个简单的硬币翻转程序,并想知道我是否能得到一些帮助。我对Java很新,只是试图询问用户他们想要翻几次硬币的次数。这是我的代码:

package cointossing;
import java.util.Random;
import java.util.Scanner;
import static java.lang.System.in;
import static java.lang.System.out;
/**
 *  Coin tossing class to simulate the flip of a coin 
 *  with two sides; Heads and Tails.
 * 
 * @author Alex Chapman ID:
 *  
 */
public class CoinTossing 
{    
    public static String sideUp;
    public static int number;

      public void run()
    {
        try( Scanner input = new Scanner(in) ) 
        {
            out.print("Enter how many times you would like to flip the coin");
            out.print("if you enter 0 the program quits");
            int number = input.nextInt();    
        }
    }


    private static void coin() 
    {
        Random rand = new Random();
        int sideup = rand.nextInt(2);
        if (sideup == 0) 
        {
            sideUp = "heads";
        } 
        else 
        {
            sideUp = "tails";
        }
    }

    public static String getsideup() 
    {
        out.println(sideUp);
        return sideUp;
    }



    public static void main(String[] args) 
    {
        int hcount = 0;
        int tcount = 0;
        for (int i = 1; i <= number; i++) 
        {
            coin();
            if (getsideup().equals("heads")) 
            {
                hcount++;
            } 
            else 
            {
                tcount++;
            }
        }
        out.println("total heads = " + hcount + " total tails = " + tcount);
    }
}

但是当我运行该程序时,它会跳过询问用户的任何内容并且只显示0,因为没有多少时间翻转硬币...我觉得我在正确的轨道上但我卡住了...任何帮助非常感谢..

编辑:

所以为了学习,我决定更改我的程序并将硬币更改为枚举并让程序返回枚举值。我还将用户输入更改为菜单样式但这有助于通过跟随我在巴恩斯和贵族的书中购买了一段时间...我想我已经走到了一条奇怪的十字路口...我想基本上将这两个程序融合在一起,这样所有的新工作就返回枚举值而言并且仍然存在,但删除“菜单”方面并将其替换为用户能够输入他们想要从前一个程序执行多少次翻转的能力。这是我写的新程序:

import java.util.*;

public class CoinTossing
{
    private enum Coin { HEADS, TAILS };

    private static final Random randomNumbers = new Random();

    private static final int HEAD = 1;
    private static final int TAIL = 2;

    public static void main(String[] args)
    {
        Scanner input = new Scanner( System.in );

        int choice;
        int toss = 0;
        int tosses = 0;
        int frontflip = 0;
        int backflip = 0;

        Coin gameStatus;

        System.out.println("Welcome to the Coin Toss Program.\n");
        System.out.println("Choose from the menu what you want to do.");
        System.out.print("1. Toss the coin\n2. Quit program\n");
        choice = input.nextInt();

        while ( choice != 0 )
        {
            if ( choice == 1 )
            {
                int CoinTossed = Flip();

                switch ( CoinTossed )
                {
                                //added tosses to switch statement to make the counter work perfect.
                case HEAD:
                    gameStatus = Coin.HEADS;
                    tosses++; // add amount of tosses
                    break;
                default: // changed case TAIL to default. Easy and works.
                    gameStatus = Coin.TAILS;
                    tosses++; // add amount of tosses
                    break;
                }

                if ( gameStatus == Coin.HEADS )
                {
                    frontflip++; //Add amount of heads
                }
                else // gameStatus == TAILS
                    backflip++; //Add amount of tails       
            }

            // A try to make an real exit out of a program

            if ( choice == 2 )
            {
                EndProgram( frontflip, backflip, tosses );
            }

            System.out.println("\nChoose from the menu what you want to do.");
            System.out.print("1. Toss the coin\n2. Quit program\n");
            choice = input.nextInt();   
        }   
    }

    //Toss the coin to determine 1 or 2.
    public static int Flip()
    {
        int toss;

        toss = 1 + randomNumbers.nextInt( 2 );

        if ( toss == 1 )
        {
            System.out.println("You toss the coin and it lands on head!");
        }
        else
        {
            System.out.println("You toss the coin and it lands on tail!");
        }
        return toss;
    }

    public static void EndProgram( int frontflip, int backflip, int tosses )
    {
        System.out.printf("You have tossed %d times.\n", tosses);
        System.out.printf("Of all those tosses, %d landed on heads, and %d on tails.\n", frontflip, backflip);
        System.exit(0);
    }
}

我正在考虑创建一个新变量并让用户设置投掷次数。然后像这样复合while循环检查

while(choice != 0 && numTosses !=0)

然后减少计数,我将不得不检查该计数,一旦达到0打印结果,只要有多少头和多少尾巴,然后提示用户他们是否想再次玩游戏...通常我甚至不知道为什么我试图这样做,但是对于知识方面,所以如果你不想帮助一个broski我理解。

3 个答案:

答案 0 :(得分:1)

你没有在你的主电话中调用run()。

您需要在run()来电之前添加for (int i = 1; i <= number; i++)

您还需要再次检查变量,看起来您使用sideUp作为int和字符串。设置值this.sideUp"heads"时,请尝试在coin()调用中添加"tails",或重命名int sideUp变量以避免混淆。

答案 1 :(得分:0)

更改主要方法,如下所示:

public static void main(String[] args) 
    {
        int hcount = 0;
        int tcount = 0;
        Scanner sc = new Scanner(System.in);
        out.println("How many coin flips do you want?");
        int number = sc.nextInt();
        for (int i = 1; i <= number; i++) 
        {
            coin();
            if (getsideup().equals("heads")) 
            {
                hcount++;
            } 
            else 
            {
                tcount++;
            }
        }
        out.println("total heads = " + hcount + " total tails = " + tcount);
    }

答案 2 :(得分:-1)

很短的一个

package BuildProjects;
import java.util.Random;
public class HeadsTails {

    public static void main(String[] args) {
        
        int coin ;
        
        // Random class
        
        Random rand = new Random();
        
        coin = rand.nextInt(4);
        
        if ( coin == 1) {
            System.out.println("Heads");
        }
        
        else 
            System.out.println("Tails");
    }    
}