Java 平头条纹输出

Java 平头条纹输出,java,Java,我应该把一枚硬币掷100次,找出最长的头像,然后输出,但到目前为止,它只给出了总共有多少头像。我试过很多方法,但都找不到解决办法 public class LongestStreak extends ConsoleProgram { public static final int FLIPS = 100; public void run() { int h = 0; int t = 0; boolean wasHeads

我应该把一枚硬币掷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);
    }
}
公共类LongestStreak扩展控制台程序
{
公共静态最终整数翻转=100;
公开募捐
{
int h=0;
int t=0;
布尔值wasHeads=false;
布尔值=false;
int streak=0;
int-ih=0;
对于(int i=0;i1){
wasHeads=真;
}
如果((isHeads=true)&(wasHeads=true)){
streak++;
}否则{
条纹=0;
}
}else if(coinFlip==1){
系统输出打印项次(“尾部”);
t++;
isHeads=假;
ih=0;
}
}
系统输出打印项次(条纹);
}
}

您需要大大简化代码

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);
    }
}
公共类LongestStreak扩展控制台程序
{
公共静态最终整数翻转=100;
公开募捐
{
int wasHeads=0;
int streak=0;
int-bestStreak=0;
对于(int i=0;i最佳条纹){
最佳条纹=条纹;
}
条纹=0;
}
}
系统输出打印项次(条纹);
}
}

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

首先,请在此处修改您的行,以便更容易阅读:
}否则,如果(coinFlip==1){

(这两个紧括号之间需要换行符)


我会考虑设置一些更清楚的变量名。例如:<代码>总目,<代码> TooTauls<代码>。我不太明白你的<代码> IH < /C>变量应该是什么,但是我用来解决这个问题的变量名是“代码> TraskAu/<代码>和<代码> BestStuxAu/COD>。ary.我认为这应该足以推动您找到解决方案。

您可以稍微简化您的代码,
清洗头和
ISHEAD
并不是真正需要的。此外,更具描述性的变量名使您的代码更容易理解。因此,类似这样的内容:

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);
    }
}
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);
}
public void run(){
int highestnumberofcontinuenceheads=0;
int currentNumberOfConcertiveHeads=0;
对于(int i=0;i<100;i++){
if(Randomizer.nextInt(1,2)==2){
当前连续磁头数++;
如果(CurrentNumberOfConcertiveHeads>LargestNumberOfConcertiveHeads){
最高连续头数=当前连续头数;
}
}否则{
CurrentNumberOfConcertiveHeads=0;
}
}
System.out.println(“最长条纹:+最高连续磁头数”);
}

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

{ 公共静态最终整数翻转=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);
}
public void run()
{
int h=0;
int t=0;
布尔值wasHeads=false;
布尔值=false;
int=0;
int streak=0;
int-ih=0;
对于(int i=0;i最长){
最长=条纹;
}
条纹=0;
ih=0;
}
}
System.out.println(“头的最长条纹:“+最长”);
}

}

您是否检查过随机化器是否不时给出一个尾部?
如果((isHeads=true)和(&(wasHeads=true))
将始终是
真的
。您在这里不是做比较(例如,
如果(isHeads&wasHeads)
),您是在做作业(赋值的返回是被赋值的值;在本例中为
true
)。此外,您再也不会将
wasHeads
设置为
false
。这意味着一旦设置为
true
,它将从此保持
true
。使用规范的Java命名约定,例如
totalHeads