В настоящее время я занимаюсь курсом в области информатики, который технически для новичков, но я чувствую, что все задания, которые они мне дают, сложнее, чем я могу справиться.Моделирование монеты/игра в Java
Это задание просит меня сделать мошенничество. Три человека играть в игру, и каждый из них имеет специфические требования, чтобы выиграть:
- один выигрывает, если есть 2 результаты головы и общее количество бросков даже
- побеждает, если есть 2 результатов хвостики и общее количество бросков даже
- побеждает, если есть 2 результатов хвостики или головки, а общее число бросаний нечетного
Что я должен сделать, это запустить эксперимент в 300 раз. Каждый раз я должен определить, кто из трех выиграл и сколько раз. И я действительно застрял. У меня почти нет кода, но у меня есть очень общее представление о том, каким должен быть код, но я не могу поместить его на язык Java.
Для моего задания мне нужно отобразить двоичную последовательность, которая заставила человека выиграть.
Моя идея:
- Инициализировать счетчик (1, 2, 3) для каждого человека, так что я могу отслеживать, сколько раз они выигрывают
- Инициализировать подсчитывать голову и подсчитывать а хвосты отслеживать случайно сгенерированную последовательность
- Используйте цикл for для практически всего эксперимента. Должен быть внешний цикл, который определяет эксперимент, который должен запускаться 300 раз, а внутренний цикл должен содержать инструкции if, которые проверяют, кто выиграл. В каждом операторе if должен быть счетчик, чтобы я мог обновить его для каждого человека. И мне нужен System.out.println(); для печати каждого результата эксперимента.
- Распечатать окончательный результат эксперимента, используя ранее установленные счетчики
EDIT: Я попытался изменить то, что все говорили, и он будет выглядеть лучше, спасибо! Но он все еще не делает то, что он должен делать, и мне интересно, почему. Я запускаю код, и я получаю только один вывод; не 300 раз, я хочу, чтобы он бежал. Кроме того, счетчики в конце не содержат информацию о том, кто выиграл, они перезагружаются каждый раз. И иногда выигрывают два человека, а это невозможно. Может ли кто-нибудь прояснить это?
EDIT: Это еще одно обновление кода. Я считаю, что он работает 300 раз! Теперь проблема заключается в выходе. Иногда это говорит; 1 Берни выигрывает, хотя вам, очевидно, нужно как минимум 2 результата для победы Берни. Кроме того, он говорит, что 1 Пенни побеждает, в то время как это также не должно быть возможным. Я что-то испортил в своих заявлениях if?
import java.util.Random;
public class Assignment3e
{
public static void main(String[] args)
{
int counter1 = 0;
int counter2 = 0;
int counter3 = 0;
Random coin = new Random();
for(int i = 0; i <= 300; i++){
int headCount = 0;
int tailsCount = 0;
for(int coinToss = 0; coinToss <= 3; coinToss++){
int random = (int) (Math.random() * 6) + 1;
String binary = Integer.toBinaryString(random);
boolean result = coin.nextBoolean();
if(result){
headCount++;
}
else{
tailsCount++;
}
if(headCount == 2 && binary.length() % 2 ==0){
//Amy wins
counter1 = counter1 + 1;
System.out.println(binary + " Amy wins.");
}
else if(tailsCount == 2 && binary.length() % 2 == 0){
//Penny wins
counter2 = counter2 + 1;
System.out.println(binary + " Penny wins.");
}
else if(headCount == 2 || tailsCount == 2 && binary.length() % 2 != 0){
//Bernie wins
counter3 = counter3 + 1;
System.out.println(binary + " Bernie wins.");
}
}
}
System.out.println("Amy wins " + counter1 + " times.");
System.out.println("Penny wins " + counter2 + " times.");
System.out.println("Bernie wins " + counter3 + " times.");
}
}
Итак, вы хотите в основном остановить циклы 'for'? Вы можете использовать break для этого –
, вы не «Случайные кости», если используете 'Math.random()' и никогда не используете 'dice' –
Удалите эту бесполезную двоичную строку. И используйте значение 'coinToss', а не' binary.length() ', что не имеет смысла – jhamon