有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java coinFlip磁头条纹输出

我应该把一枚硬币掷100次,找出最长的头像,然后输出,但到目前为止,它只给出了总共有多少头像。我试过很多方法,但都找不到解决办法

public class LongestStreak extends ConsoleProgram
{
    public static final int FLIPS = 100;

    public void run()
    {
        int h = 0;
        int t = 0;
        boolean wasHeads = false;
        boolean isHeads = false;
        int streak = 0;
        int ih = 0;

        for (int i = 0; i < FLIPS; i++) {
            int coinFlip = Randomizer.nextInt(1, 2);

            if (coinFlip == 2) {
                System.out.println("Heads");
                h++;
                ih++;
                isHeads = true;

                if (ih > 1) {
                    wasHeads = true;
                }
                if ((isHeads = true) && (wasHeads = true)) {   
                    streak++;
                } else {
                    streak = 0;
                }
            } else if (coinFlip == 1) {
                System.out.println("Tails");
                t++;  
                isHeads = false;
                ih = 0;
            }
        }

        System.out.println(streak);
    }
}

共 (4) 个答案

  1. # 1 楼答案

    您需要大大简化代码

    public class LongestStreak extends ConsoleProgram
    {
        public static final int FLIPS = 100;
    
        public void run()
        {
            int wasHeads = 0;
            int streak = 0;
            int bestStreak = 0;
    
            for (int i = 0; i < FLIPS; i++) {
                int coinFlip = Randomizer.nextInt(1, 2);
    
                if (coinFlip == 2) {
                    streak++;
                    wasHeads = 1;
                } else if (coinFlip == 1) {
                    wasHeads = 0;
                    if (steak > bestStreak) {
                        bestStreak = streak;
                    }
                    streak = 0;
                }
            }
            System.out.println(streak);
        }
    }
    

    结束时重置条纹(coinFlip为1),但首先检查它是否优于之前的最佳条纹,如果是,则相应地更新最佳条纹。否则,只需重复streak并将每个头部的洗头数保持为1。注意这里不需要布尔值;1或0整数在字面上和逻辑上是相同的

  2. # 2 楼答案

    感谢您的帮助,修复了我的代码:)

    public class LongestStreak extends ConsoleProgram
    

    { 公共静态最终整数翻转=100

    public void run()
    {
        int h = 0;
        int t = 0;
        boolean wasHeads = false;
        boolean isHeads = false;
        int longest = 0;
        int streak = 0;
        int ih = 0;
    
        for (int i = 0; i < FLIPS; i++) {
    
            int coinFlip = Randomizer.nextInt(1, 2);
    
            if (coinFlip == 2) { //heads
    
                System.out.println("Heads");
    
                if (wasHeads = true) {
                    streak++;
                } else {
                    streak = 0;
                }
    
                wasHeads = true;
            } else if(coinFlip == 1) { //tails
    
                System.out.println("Tails");
    
                t++;
    
                isHeads = false;
                if (streak > longest){
                    longest = streak;
                }
    
                streak = 0;
    
                ih = 0;
    
            }
    
        }
    
        System.out.println("Longest streak of heads: " + longest);
    }
    

    }

  3. # 3 楼答案

    首先也是最重要的一点是,在这里修改您的行以便更容易阅读:}} else if (coinFlip == 1) {
    (这两个紧括号之间需要换行符)

    我会考虑设置一些更清楚的变量名。例如:totalHeadstotalTails。我不太明白你的ih变量应该是什么,但是我用来解决这个问题的变量名是thisStreakbestStreak。is/washeads应该是不必要的。我认为这应该足以推动你找到解决方案

  4. # 4 楼答案

    您可以稍微简化代码,wasHeadsisHeads实际上并不需要。此外,更具描述性的变量名使代码更易于理解。比如说:

    public void run() {
        int highestNumberOfConsecutiveHeads = 0;
        int currentNumberOfConsecutiveHeads = 0;
        for (int i = 0; i < 100; i++) {
            if (Randomizer.nextInt(1, 2) == 2) {
                currentNumberOfConsecutiveHeads++;
                if (currentNumberOfConsecutiveHeads > largestNumberOfConsecutiveHeads) {
                    highestNumberOfConsecutiveHeads = currentNumberOfConsecutiveHeads;
                }
            } else {
                currentNumberOfConsecutiveHeads = 0;
            }
        }
        System.out.println("Longest streak: " + highestnumberOfConsecutiveHeads);
    }