因此,我们正在java类中制作HiLo,指令说明播放器应该可以播放多次。因此,我这样做了,并且还计算了猜测所有游戏数所需的平均猜测数,我不知道该怎么做,因为在游戏重置后,猜测数会重置?
我在时间上有同样的问题(完全一样,猜数字的平均时间)
我曾尝试编写guess ++,但我不知道如何“存储”每个游戏的猜测数量,也不知道如何做
public class HiLo{
//Globala-Variabler
static int tal = 0;
static int totaltSpelade = 0;
static int gissning = 1;
static int antalGissningar = 0;
public static void main(String args[]) throws InterruptedException {
// val slingan
int val = Kbd.readInt("\nKlicka 1 för 1-10\nKlicka 2 för 1-100\nKlicka 3 för 1-1000");
if (val == 1){
tal = (int) (Math.random() * 10)+1;
}
else if (val == 2){
tal = (int) (Math.random() * 100)+1;
}
else if (val ==3){
tal = (int) (Math.random() * 1000)+1;
}
else{
Kbd.clearScreen();
System.out.println("\nFelinmatning!");
main(null);
}
// tid och gissnings slinga
int gissningar = Kbd.readInt("\nBörja gissa!");
long startTid = System.currentTimeMillis();
slinga();
//stop tid
System.out.println("\nGrattis!\nDu gissade rätt tal på " + antalGissningar + " försök!");
long stopTid = System.currentTimeMillis();
long tid = stopTid-startTid;
System.out.print("Det tog dig! " + (tid/1000) + "s");
totaltSpelade++;
int avsluta = Kbd.readInt("\nKlicka 1 för att köra igen\nKlicka 2 för att avsluta");
if (avsluta == 1){
//Kbd.clearScreen();
main(null);
}
else{
System.out.println("\nHejdå!, Det tog dig i snitt " +
// THIS IS WHERE I WANT TO PRINT OUT THE AVERAGE NUMBER OF GUESSES OF ALL GAMES
(antalGissningar/totaltSpelade) + " gissningar per gång.");
System.out.println("\nOch i snitt " + (tid/1000) + " s");
//Kbd.clearScreen();
System.exit(0);
}
}
// val slinga metod
public static void slinga(){
while (gissning != tal) {
antalGissningar++;
if (gissning > tal) {
gissning = Kbd.readInt("\nLägre! ");
} else if (gissning < tal) {
gissning = Kbd.readInt("\nHögre! ");
}
}
}
}
最佳答案
我创建了一个猜数字游戏。目的是向您展示如何使用嵌套循环而不是递归调用main方法。它可能无法满足您的所有要求。您可以添加许多内容,例如根据难度级别计算平均猜测。给出提示,确保用户输入了难度级别等范围内的数字。
我已经在评论中解释了逻辑。
public static void main(String args[]) {
String playAgain = "yes";
ArrayList<Integer> totalGuesses = new ArrayList<>(); // Keep track of total guesses in all rounds
int round = 1; // Round number
do {
// Prints greeting
System.out.println("Welcome to High Low game.\nPlease enter difficulty level.");
System.out.println("Level 1: Easy Range [1-10]");
System.out.println("Level 2: Medium Range [1-100]");
System.out.println("Level 3: Hard Range [1-1000]");
System.out.print("\nEnter Level Number: ");
Scanner scanner = new Scanner(System.in);
int difficultyLevel = scanner.nextInt();
// Making sure that user inputs difficulty level within a certain range
while (!(difficultyLevel > 0 && difficultyLevel <= 3)) {
System.out.print("Please enter correct difficulty level: ");
difficultyLevel = scanner.nextInt();
}
// Displays selected difficulty level
System.out.println("Difficulty level is set to " + difficultyLevel + "\n");
int theNumber = 0;
if (difficultyLevel == 1) { // This part is copied from your code
theNumber = (int) (Math.random() * 10) + 1;
} else if (difficultyLevel == 2) {
theNumber = (int) (Math.random() * 100) + 1;
} else if (difficultyLevel == 3) {
theNumber = (int) (Math.random() * 1000) + 1;
}
boolean hasGuessed = false;
int numberOfGuesses = 0; // keep track of number of guesses in each round
int guessedNumber;
ArrayList<Integer> alreadyGuessed = new ArrayList<>();
while (!hasGuessed) { // While user has not guessed (This while loop is nested in do while)
System.out.print("Please guess the number: ");
guessedNumber = scanner.nextInt();
if (theNumber == guessedNumber) { // If user guesses correctly
hasGuessed = true;
numberOfGuesses++;
System.out.printf("\nCongratulations you have guessed the number on your number %d attempt",
numberOfGuesses);
totalGuesses.add(new Integer(numberOfGuesses));
} else { // If guess is incorrect
numberOfGuesses++;
alreadyGuessed.add(new Integer(guessedNumber));
if (guessedNumber > theNumber) {
System.out.println("\nSorry but the number you are trying to guess is lower that your guess");
} else {
System.out.println("\nSorry but the number you are trying to guess is higher that your guess");
}
// Prints already guessed so user doesn't enter same value. You can program so it doesn't accept same number by checking the guessedNumber againstalreadyGuessed
System.out.println("Already guessed numbers: " + alreadyGuessed.toString());
}
}
// when hasGuessed is true the while loop exits
System.out.print("\nDo you want to play again? Enter yes or no: ");
playAgain = scanner.next(); // Asking user if they want another round
if (playAgain.equalsIgnoreCase("yes")) {
System.out.println("\nRound " + ++round); //Prints round number plus adds empty line between each round
}
} while (playAgain.equalsIgnoreCase("yes"));
// If player enters anything besides yes it exits do while loop
double averageGuesses = calculateAverage(totalGuesses); // Calculates average guesses
System.out.println("\nYour average number of guesses are " + averageGuesses);
}
/*
* Adds all elements in array and divides it by arraylist size
*/
private static double calculateAverage(ArrayList<Integer> list) {
Integer sum = 0;
if (!list.isEmpty()) {
// Iterate through list and stores each item in a variable (item)
for (Integer item : list) {
sum += item; // short form of sum = sum + item;
}
return sum.doubleValue() / list.size();
}
return sum;
}
样本输出:
Welcome to High Low game.
Please enter difficulty level.
Level 1: Easy Range [1-10]
Level 2: Medium Range [1-100]
Level 3: Hard Range [1-1000]
Enter Level Number: 1
Difficulty level is set to 1
Please guess the number: 6
Sorry but the number you are trying to guess is lower that your guess
Already guessed numbers: [6]
Please guess the number: 2
Sorry but the number you are trying to guess is higher that your guess
Already guessed numbers: [6, 2]
Please guess the number: 5
Congratulations you have guessed the number on your number 3 attempt
Do you want to play again? Enter yes or no: yes
Round 2
Welcome to High Low game.
Please enter difficulty level.
Level 1: Easy Range [1-10]
Level 2: Medium Range [1-100]
Level 3: Hard Range [1-1000]
Enter Level Number: 1
Difficulty level is set to 1
Please guess the number: 1
Congratulations you have guessed the number on your number 1 attempt
Do you want to play again? Enter yes or no: no
Your average number of guesses are 2.0
关于java - 如何计算多次猜测一个数字所需的平均猜测次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58086338/