Java 我该如何计算一个数字的平均猜测次数(多次)

Java 我该如何计算一个数字的平均猜测次数(多次),java,average,Java,Average,因此,我们在我们的java类im中制作了HiLo,说明中说玩家应该能够玩不止一次。我已经这样做了,还计算了所有游戏的平均猜测次数,我不知道该怎么做,因为游戏重置后猜测次数会重置 我对时间也有同样的问题(完全相同的事情,猜测数字的平均时间) 我试过写猜谜+,但我不知道如何“存储”每一场游戏的猜谜次数,也不知道如何做 public class HiLo{ //Globala-Variabler static int tal = 0; static int totaltSpelad

因此,我们在我们的java类im中制作了HiLo,说明中说玩家应该能够玩不止一次。我已经这样做了,还计算了所有游戏的平均猜测次数,我不知道该怎么做,因为游戏重置后猜测次数会重置

我对时间也有同样的问题(完全相同的事情,猜测数字的平均时间)

我试过写猜谜+,但我不知道如何“存储”每一场游戏的猜谜次数,也不知道如何做

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! ");
         }
      }
   }
}
公共类HiLo{
//球变星
静态int-tal=0;
静态整数totaltSpelade=0;
静态int-gissning=1;
静态int ANTALGISNINGAR=0;
公共静态void main(字符串args[])引发InterruptedException{
//瓦尔·斯林根
int val=Kbd.readInt(“\nKlicka 1 för 1-10\nKlicka 2 för 1-100\nKlicka 3 för 1-1000”);
如果(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;
}
否则{
Kbd.clearScreen();
System.out.println(“\n终止!”);
主(空);
}
//tid och gissnings slinga
int gissningar=Kbd.readInt(“\nBörja gissa!”);
long startTid=System.currentTimeMillis();
slinga();
//停止tid
System.out.println(“\nGrattis!\nDu gissade rätt tal på”+antalgissingar+“försök!”);
long stopTid=System.currentTimeMillis();
长tid=stopTid startTid;
系统输出打印(“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”);
如果(avsluta==1){
//Kbd.clearScreen();
主(空);
}
否则{
System.out.println(“\nHejdå!Det tog dig i snitt”+
//这就是我想要打印出所有游戏的平均猜测次数的地方
(antalGissningar/totaltSpelade)+“gissningar per gång.”;
System.out.println(“\nOch i snitt”+(tid/1000)+“s”);
//Kbd.clearScreen();
系统出口(0);
}
}
//瓦尔斯林加梅托德酒店
公共静态void slinga(){
while(gissning!=tal){
Antalgissinsingar++;
如果(gissning>tal){
gissning=Kbd.readInt(“\nLägre!”);
}否则如果(gissning
我创建了一个猜数字游戏。目标是向您展示如何使用嵌套循环而不是递归调用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;
}

如果您对我的代码有任何反馈,请告诉我,我希望改进!旁注:Kbd类是我们老师用来代替扫描器的类,所以它不是两行代码,而是一行代码,非常整洁!至少对我来说,如果变量名是英文的,那就容易多了。你已经计算过平均猜测次数了,对吧?唯一的问题是,当用户重新启动程序时,一切都会重置。在这种情况下,您可以在while循环完成后将该数据保存到文件中,将该游戏的猜测添加到新字段:
totalGuesses
,并增加另一个字段:
totalGames
。然后,你可以在任何时候用游戏来划分猜测。另外,我想我应该使用循环,而不是递归调用
main
。@AjahnCharles我们还没有真正了解字段,所以我不知道怎么做,你介意解释另一种方法及其工作原理吗?@Rezvan你的意思是计算平均值吗?只需将列表中的所有元素相加,然后除以列表大小即可。请解释一下整数标记:列表和总和+=标记;means@Rezvan哦,这只是循环前进。我将在回答中加上解释。Hi @ ReZVAN如果这个答案有助于你通过点击复选标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
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