因此,我们正在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/

10-10 13:24