Java 有没有办法确保while循环在请求输入之前不会运行一次?
我正在写一个掷硬币程序。基本上,用户会被问到他们想玩多少游戏。然后,while循环运行游戏,要求用户输入由空格head或tails ex.H T H分隔的几次抛硬币。然后程序将用户输入字符串转换为数组,for循环通过数组检查heads大写字母H,并将其存储在heads变量中。得分的计算方法是将数组中的头数除以数组的长度,再乘以100,得出一个百分比。如果得分为50%或以上,则该玩家获胜。如果低于50%,玩家将失败。我发现的两个错误是while循环在我输入任何输入之前已经运行了一次。此外,分数的计算似乎不正确,它总是返回0.0%或100.0%。我想这和输入数组的长度有关,但我说不出来。多谢各位Java 有没有办法确保while循环在请求输入之前不会运行一次?,java,arrays,while-loop,Java,Arrays,While Loop,我正在写一个掷硬币程序。基本上,用户会被问到他们想玩多少游戏。然后,while循环运行游戏,要求用户输入由空格head或tails ex.H T H分隔的几次抛硬币。然后程序将用户输入字符串转换为数组,for循环通过数组检查heads大写字母H,并将其存储在heads变量中。得分的计算方法是将数组中的头数除以数组的长度,再乘以100,得出一个百分比。如果得分为50%或以上,则该玩家获胜。如果低于50%,玩家将失败。我发现的两个错误是while循环在我输入任何输入之前已经运行了一次。此外,分数的计
import java.util.Scanner;
public class HeadTailGenerator {
public static void main (String []args) {
Scanner scanner = new Scanner(System.in);
System.out.print("How many games?");
int games = scanner.nextInt();
int count = 0;
int heads =0;
while (count<games){
System.out.print("Enter your flips for game "+ count+": ");
String input = scanner.nextLine();
String [] inputArray = input.split("\\s+");
for (int i = 0; i <inputArray.length-1; i++){
if (inputArray[i].equals("H")){
heads++;
}
}//exit for loop
double score = (heads/(inputArray.length)*100);
if (score >= 50.0){
System.out.println("Game "+ count + ": "+ heads + " heads ("+ score+ "%); You win!");
}
else {
System.out.println("Game "+ count + ": "+ heads + " heads ("+ score+ "%); You lose!");
}
count++;
}
}
}
添加一些打印将有助于调试所有问题 第一个问题是nextInt没有捕获用于输入游戏数量的换行符,因此您可以添加scanner.nextLine;之后,为了防止比赛马上结束 第二个问题是for循环中的条件。移除-1以循环数组中的所有元素 第三个问题是,在计算得分时,您将整数除以一个始终大于或等于该整数的数字,因此小数被截断或结果为1。您可以在操作中将整数强制转换为double,或者将heads声明为double,或者,如果您不关心百分比结果的小数,则可以在除法之前乘以100 导入java.util.Scanner; 公共班机{ 公共静态无效主字符串[]args{ Scanner Scanner=新ScannerSystem.in; System.out.print有多少个游戏; int games=scanner.nextInt; System.out.printlnGames:+游戏; scanner.nextLine; 整数计数=0; int头=0;
while count我不久前遇到过这个问题。第一个问题,为什么while循环在接受用户输入之前运行一次,是因为扫描器处理读取nextInt的方式。扫描器刚刚读取了它到达的下一个整数值,但还没有到达行的末尾。因此,当您在while循环中调用scanner.nextLine时,它会lly只是读取第一行输入的末尾,这就是为什么在那里得到零 第二个问题总是为零,与您使用的数据类型有关。请记住,int/int=int。因此,当您除以3/4=0时,因为int被截断。 存储在double中并不重要,出错的是整数除法。如果你简单地将head改为float,它就会纠正这个错误
您可以了解有关扫描仪的更多信息看看这个,nextInt可能也存在同样的问题;另外,请打印inputArray的内容,以检查拆分后有哪些值。