使用 Java 中的随机类进行简单的抛硬币。 do while 循环似乎没有生成随机结果

问题描述 投票:0回答:5

每次在 main 中运行 do-while 循环时,我都会遇到生成随机数的问题。当我删除 do - while 语句时,if 语句工作正常,并且似乎每次都会生成一个随机结果,但是当它在循环中重复时,它似乎只是重复初始结果。

这是我的代码:

import java.util.Random;

public class CoinToss {
    private enum Coin {Heads, Tails};

    Random randomNum = new Random();
    private int result = randomNum.nextInt(2);
    private int heads = 0;
    private int tails = 1;
    Coin coinFlip;

    public void flip() {
        if (result == 0) {
            coinFlip = Coin.Heads;
            System.out.println("You flipped Heads!");
        } else {
            coinFlip = Coin.Tails;
            System.out.println("You flipped Tails!");
        }
    }
}

我的方法主要是我似乎遇到问题:

import java.util.Scanner;

public class TossGame {
    public static void main(String[] args) {
        CoinToss test = new CoinToss();
        int choice;

        System.out.println("Welcome to the coin toss game!");
        do {
            System.out.print("Enter 1 to toss coin or enter 0 to quit: ");
            Scanner input = new Scanner(System.in);
            choice = input.nextInt();

            if (choice == 1) {
                test.flip();
            } else if (choice > 1) {
                System.out.println("Invalid entry - please enter 1 or 0: ");
                choice = input.nextInt();
            }
        } while (choice != 0);
    }
}
java random
5个回答
6
投票

您需要将结果放入

flip()
方法中,因此每次调用都是随机的。

private int result;
private int heads = 0;
private int tails = 1;
Coin coinFlip;

public void flip(){
    result = randomNum.nextInt(2)
    if(result == 0){
        coinFlip = Coin.Heads;
        System.out.println("You flipped Heads!");
    }else{
        coinFlip = Coin.Tails;
        System.out.println("You flipped Tails!");
    }
  }
}

2
投票

初始化时,您只“翻转”一次

result

private int result = randomNum.nextInt(2);

当您调用

flip
时,会得到另一个结果:

public void flip(){
    result = randomNum.nextInt(2);  // Add this line
    if(result == 0){

1
投票

每次调用 Flip() 时都需要随机化一次翻转,而不是在构造 CoinToss 时:

public class CoinToss {

private enum Coin{Heads, Tails};

Random randomNum = new Random();
private int result;
private int heads = 0;
private int tails = 1;
Coin coinFlip;

public void flip(){
    result = randomNum.nextInt(2)
    if(result == 0){
        coinFlip = Coin.Heads;
        System.out.println("You flipped Heads!");
    }else{
        coinFlip = Coin.Tails;
        System.out.println("You flipped Tails!");
    }
}

1
投票
if (Math.random() < .5){
    System.out.println("Heads");
}else{
    System.out.println("Tails");
}

这可能是最简单的抛硬币解决方案。


0
投票

您在代码底部缺少了这个

System.out.printf("正面:%.2f%% ", 人头百分比);

System.out.printf("尾数:%.2f%% ", 尾部百分比);

© www.soinside.com 2019 - 2024. All rights reserved.