我正在写一个抛硬币程序。基本上,询问用户他们想玩多少游戏。然后,while循环运行该游戏,要求用户输入由空格(头或尾,例如H H H T H)分隔的几个抛硬币。然后,程序将用户输入的字符串转换为数组,并且for循环遍历该数组并检查是否为head(大写H),并将其存储在heads变量中。分数是通过将数组中的头数除以数组的长度并将其乘以100得出的百分比得出的。如果分数为50%或以上,则玩家获胜。如果低于50%,则玩家输。我发现的两个错误是while循环在输入任何内容之前已经运行了一次。此外,总分似乎总是返回0.0%或100.0%的分数计算不正确。我认为这与inputArray.length有关,但我无法分辨。谢谢。
\\
答案 0 :(得分:1)
添加一些打印件将帮助您调试所有问题。
第一个问题是nextInt()
无法捕获用于输入游戏数的换行符,因此您可以在其后添加scanner.nextLine();
,以防止游戏立即结束。
第二个问题是for循环中的条件。删除-1
以遍历数组中的所有元素。
第三个问题是,要获取分数,您需要将整数除以始终大于或等于该整数的数字,因此小数点将被截断或结果为1。您可以将整数转换为整数将运算加倍或将heads
声明为双倍,或者,如果您不在乎百分比结果的小数位数,也可以乘以100,然后再除。
import java.util.Scanner;
public class Main {
public static void main (String []args) {
Scanner scanner = new Scanner(System.in);
System.out.print("How many games? ");
int games = scanner.nextInt();
System.out.println("Games: "+ games);
scanner.nextLine();
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; i++){
System.out.println("Input["+ i +"]: "+ inputArray[i]);
if (inputArray[i].equals("H")){
heads++;
System.out.println("Heads count: "+ heads);
}
}//exit for loop
double score = ((double)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++;
}
}
}
答案 1 :(得分:0)
不久前我遇到了这个问题。第一个问题是为什么while循环在接受用户输入之前运行一次,原因是扫描程序处理读取nextInt()
的方式。扫描程序刚刚读取了它所到达的下一个整数值,但尚未到达该行的末尾。因此,当您在while循环中调用scanner.nextLine()
时,它实际上只是在读取输入的第一行的结尾,这就是为什么在那里得到零的原因。
第二个问题始终为零,与您使用的数据类型有关。记住,一个int / int = int。因此,当您除以3/4 = 0时,因为int被截断。 您存储在double中并不重要,这是整数除法弄错了它。如果只是简单地将头改变为浮动,则将纠正该问题。
您可以找到有关扫描仪here.
的更多信息