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);
}
}
# 1 楼答案
您需要大大简化代码
结束时重置条纹(coinFlip为1),但首先检查它是否优于之前的最佳条纹,如果是,则相应地更新最佳条纹。否则,只需重复streak并将每个头部的洗头数保持为1。注意这里不需要布尔值;1或0整数在字面上和逻辑上是相同的
# 2 楼答案
感谢您的帮助,修复了我的代码:)
{ 公共静态最终整数翻转=100
}
# 3 楼答案
首先也是最重要的一点是,在这里修改您的行以便更容易阅读:
我会考虑设置一些更清楚的变量名。例如:}} else if (coinFlip == 1) {
(这两个紧括号之间需要换行符)
totalHeads
,totalTails
。我不太明白你的ih
变量应该是什么,但是我用来解决这个问题的变量名是thisStreak
和bestStreak
。is/washeads应该是不必要的。我认为这应该足以推动你找到解决方案# 4 楼答案
您可以稍微简化代码,
wasHeads
和isHeads
实际上并不需要。此外,更具描述性的变量名使代码更易于理解。比如说: