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