#java #for-loop #random
Вопрос:
В этом коде, который я пишу здесь, пользователь вводит, хотят ли они выбрать орел или решку в игре coinflip. Я хотел бы вести учет того, сколько раз появляется орел или решка, и выводить их каждый раз, когда они меняются. После нескольких часов попыток и поисков я не могу понять это идеально, поэтому, если кто-нибудь может сообщить мне, что я мог бы использовать, дайте мне знать.
import java.util.Random;
import java.util.Scanner;
public class CoinToss {
private enum Coin {
Head, Tail
}
public static void main(String[] args) {
CoinToss game = new CoinToss();
game.startGame();
}
private void startGame() {
Scanner scanner = new Scanner(System.in);
Coin guess;
while (true) {
System.out.print("Enter your guess whether the coin will be heads or tails. Type 1 for heads, 2 for tails, or 3 to quit: ");
String choice = scanner.nextLine();
if (choice.equalsIgnoreCase("3")) {
break;
} else if (choice.equalsIgnoreCase("1")) {
guess = Coin.Head;
} else if (choice.equalsIgnoreCase("2")) {
guess = Coin.Tail;
} else {
System.out.println("Please select either heads tails or quit.");
continue;
}
Coin toss = tosscoin();
if (guess == toss) {
System.out.println("You guessed correctly!");
} else {
System.out.println("You guessed incorrectly");
}
}
scanner.close();
}
private Coin tosscoin() {
Random r = new Random();
int sideup = r.nextInt(2);
if (sideup == 1) {
return Coin.Head;
} else {
return Coin.Tail;
}
}
}
Комментарии:
1. Как насчет того, что это не работает?
2. Это работает, извините, если я не прояснил свой вопрос. Я пытаюсь вести текущий подсчет того, сколько раз появляется каждая сторона, когда пользователь продолжает выбирать.
3. Мне жаль, но то, что вы здесь делаете, похоже, в основном раскрывает, как «неслучайные» случайные числа находятся на компьютерах из действительно случайных результатов. Математико-статистическое «биномиальное распределение» (оно же кривая в форме колокола) является истинным случайным (некомпьютерным рандомизированным) ответом на этот вопрос
Ответ №1:
Например, вы можете добавить два поля в свой класс CoinToss. Например, int орел и int решка. Инициализируйте их с 0 в методе startGame (). Затем в методе tosscoin() :
if (sideup == 1) {
heads ;
return Coin.Head;
} else {
tails ;
return Coin.Tail;
}
Вы можете получить доступ к этим полям в методе startGame() и делать с ними все, что захотите.
Вы также можете определить эти две переменные непосредственно в методе startGame() и увеличить их в зависимости от типа монеты, которую вы получаете от метода tosscoin ().
Комментарии:
1. Спасибо! это вывело меня на правильный путь и дало мне хорошее представление о том, что мне нужно было сделать
Ответ №2:
Ниже код должен работать. каждый раз, когда он бросает, он сохраняет текущее значение в переменной и сравнивает его в следующий раз со значением бросания.
import java.util.Random;
import java.util.Scanner;
public class CoinToss {
private static int headCounter;
private static int tailCounter;
private static int previousToss;
private enum Coin {
Head, Tail
}
public static void main(String[] args) {
CoinToss game = new CoinToss();
game.startGame();
}
private void startGame() {
headCounter = 0;
tailCounter = 0;
previousToss = 0;
Scanner scanner = new Scanner(System.in);
Coin guess;
while (true) {
System.out.print("Enter your guess whether the coin will be heads or tails. Type 1 for heads, 2 for tails, or 3 to quit: ");
String choice = scanner.nextLine();
if (choice.equalsIgnoreCase("3")) {
break;
} else if (choice.equalsIgnoreCase("1")) {
guess = Coin.Head;
} else if (choice.equalsIgnoreCase("2")) {
guess = Coin.Tail;
} else {
System.out.println("Please select either heads tails or quit.");
continue;
}
Coin toss = tosscoin();
if (guess == toss) {
System.out.println("You guessed correctly!");
} else {
System.out.println("You guessed incorrectly");
}
}
scanner.close();
}
private Coin tosscoin() {
Random r = new Random();
int sideup = r.nextInt(2);
Coin currentGuess;
if (sideup == 1) {
headCounter ;
currentGuess = Coin.Head;
} else {
tailCounter ;
currentGuess = Coin.Tail;
}
checkIfFlipped(sideup);
return currentGuess;
}
static void checkIfFlipped(int currentToss) {
if (currentToss != previousToss) {
if (currentToss == 0) {
System.out.println("Coin fliped from head to tail");
} else {
System.out.println("Coin fliped from tail to head");
}
}
previousToss = currentToss;
}
}
Комментарии:
1. Большое спасибо, я был на правильном пути, но не совсем там, это было идеальное руководство.