#java #for-loop #if-statement #nested-if
#java #for-цикл #if-оператор #вложенный — если
Вопрос:
Это то, что у меня есть до сих пор, но я не могу понять, как это сделать. Пока я могу хранить только общее количество перевернутых орлов и решек.
import java.util.*;
class Main {
public static void main(String[] args) {
int heads = 0, tails = 0;
int usernum;
int hc=0;
Scanner scan = new Scanner(System.in);
Coin myCoin = new Coin();
System.out.println("The number flips: ");
usernum=scan.nextInt();
for (int count = 1; count <= usernum; count )//this is where I'm having the most trouble, as I can't figure out how to store the greatest streak for heads and tails.
{
myCoin.flip();//generates either 1 or 0
if (myCoin.isHeads())//checks if the integer is equal to 1 (which is heads in this case)
{
heads ;
System.out.println("Heads");
if (heads>=hc)
hc ;
}else{
tails ;
hc=0;
System.out.println("Tails");
}
}
System.out.println("Heads: " heads);
System.out.println("Tails: " tails);
}
}
Комментарии:
1. johndoe123 — Есть какие-либо обновления?
2. Спасибо, некоторое время назад я наконец-то приступил к работе.
Ответ №1:
Следите за тремя переменными: headStreak
, tailStreak
, и maxStreak
, все инициализированы как 0. Внутри вашего цикла for, когда вы сталкиваетесь с головой, вам нужно сделать 3 вещи:
- увеличить
headStreak
- Если
tailStreak
большеmaxStreak
, установитеmaxStreak
значениеtailStreak
- установите
tailStreak
значение 0.
Сделайте то же самое, когда столкнетесь с хвостами, за исключением замены headStreak
на tailStreak
и наоборот.
После цикла for: System.println(Math.max(Math.max(headStreak, tailStreak), maxStreak))
. Если вы правильно выполнили шаги, это должно сработать.
Ответ №2:
Для решения этой проблемы вы можете применить следующий алгоритм:
- Вы можете использовать две переменные, скажем
headStreak
, иtailStreak
для отслеживания соответствующих полос. Когда полоса прерывается, сбросьте их на1
. - Вы можете использовать две переменные, скажем
maxTailStreak
, иmaxHeadStreak
для отслеживания максимального количества соответствующих полос. - Вы можете использовать переменную, скажем
last
, для отслеживания результата последнего переворота. Начните сlast = -1
и установите для него значение1
в случаеHeads
, и0
в случаеTails
.
ДЕМОНСТРАЦИЯ:
import java.util.Random;
import java.util.Scanner;
class Coin {
Random random = new Random();
int resu<
public void flip() {
result = random.nextInt(2);
}
public boolean isHeads() {
return result == 1;
}
}
public class Main {
public static void main(String[] args) {
int heads = 0, tails = 0;
int usernum;
int headStreak = 0, tailStreak = 0, last = -1, maxTailStreak = 0, maxHeadStreak = 0;
Scanner scan = new Scanner(System.in);
Coin myCoin = new Coin();
System.out.print("The number flips: ");
usernum = scan.nextInt();
for (int count = 1; count <= usernum; count ) {
myCoin.flip();
if (myCoin.isHeads()) {
heads ;
System.out.println("Heads");
if (last == 1 || last == -1) {
headStreak ;
if (headStreak >= maxHeadStreak) {
maxHeadStreak = headStreak;
}
} else {
headStreak = 1;
}
last = 1;
} else {
tails ;
System.out.println("Tails");
if (last == 0 || last == -1) {
tailStreak ;
if (tailStreak >= maxTailStreak) {
maxTailStreak = tailStreak;
}
} else {
tailStreak = 1;
}
last = 0;
}
}
System.out.println("Heads: " heads);
System.out.println("Tails: " tails);
System.out.println("The longest streak of Heads: " maxHeadStreak);
System.out.println("The longest streak of Tails: " maxTailStreak);
}
}
Пробный запуск:
The number flips: 10
Tails
Tails
Tails
Tails
Tails
Heads
Heads
Heads
Tails
Tails
Heads: 3
Tails: 7
The longest streak of Heads: 3
The longest streak of Tails: 5
Ответ №3:
Вам нужно установить счетчик для каждой серии и получить максимум примерно так:
public static void main(String[] args) {
int heads = 0, tails = 0;
int usernum;
int longestHeadStreak = 0, currentHeadStreak = 0, longestTailStreak = 0, currentTailStreak = 0 ;
Scanner scan = new Scanner(System.in);
Coin myCoin = new Coin();
System.out.println("The number flips: ");
usernum=scan.nextInt();
for (int count = 1; count <= usernum; count )//this is where I'm having the most trouble, as I can't figure out how to store the greatest streak for heads and tails.
{
myCoin.flip();//generates either 1 or 0
if (myCoin.isHeads())//checks if the integer is equal to 1 (which is heads in this case)
{
currentTailStreak = 0;
currentHeadStreak ;
System.out.println("Heads");
if (currentHeadStreak>longestHeadStreak)
longestHeadStreak=currentHeadStreak;
}else{
if (currentTailStreak>longestTailStreak) {
longestTailStreak=currentTailStreak;
}
currentHeadStreak = 0;
currentTailStreak ;
System.out.println("Tails");
}
}
System.out.println("Max streak of Heads: " longestHeadStreak);
System.out.println("Max streaks of Tails: " longestTailStreak);
}