Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法确保while循环在请求输入之前不会运行一次?_Java_Arrays_While Loop - Fatal编程技术网

Java 有没有办法确保while循环在请求输入之前不会运行一次?

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循环在我输入任何输入之前已经运行了一次。此外,分数的计

我正在写一个掷硬币程序。基本上,用户会被问到他们想玩多少游戏。然后,while循环运行游戏,要求用户输入由空格head或tails ex.H T H分隔的几次抛硬币。然后程序将用户输入字符串转换为数组,for循环通过数组检查heads大写字母H,并将其存储在heads变量中。得分的计算方法是将数组中的头数除以数组的长度,再乘以100,得出一个百分比。如果得分为50%或以上,则该玩家获胜。如果低于50%,玩家将失败。我发现的两个错误是while循环在我输入任何输入之前已经运行了一次。此外,分数的计算似乎不正确,它总是返回0.0%或100.0%。我想这和输入数组的长度有关,但我说不出来。多谢各位

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的内容,以检查拆分后有哪些值。