有没有一种方法可以确保while循环在请求输入之前不会运行一次?

时间:2020-01-29 03:42:33

标签: java arrays while-loop

我正在写一个抛硬币程序。基本上,询问用户他们想玩多少游戏。然后,while循环运行该游戏,要求用户输入由空格(头或尾,例如H H H T H)分隔的几个抛硬币。然后,程序将用户输入的字符串转换为数组,并且for循环遍历该数组并检查是否为head(大写H),并将其存储在heads变量中。分数是通过将数组中的头数除以数组的长度并将其乘以100得出的百分比得出的。如果分数为50%或以上,则玩家获胜。如果低于50%,则玩家输。我发现的两个错误是while循环在输入任何内容之前已经运行了一次。此外,总分似乎总是返回0.0%或100.0%的分数计算不正确。我认为这与inputArray.length有关,但我无法分辨。谢谢。

\\

2 个答案:

答案 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.

的更多信息