Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 从档案中数硬币的数量_Java_File_Io_Java.util.scanner - Fatal编程技术网

Java 从档案中数硬币的数量

Java 从档案中数硬币的数量,java,file,io,java.util.scanner,Java,File,Io,Java.util.scanner,我试图解决的问题来自《构建Java程序》一书,其格式如下: 编写一个名为coinFlip的方法,该方法接受一个扫描器,该扫描器表示头部(H)或尾部(T)的硬币翻转的输入文件。考虑每一行是一个单独的硬币翻转集合,并输出该行中的头数和百分比。如果超过50%,打印“你赢了!” 考虑以下文件: ht T T T h 对于上述输入,您的方法应产生以下输出: 3人(60.0%) 你赢了 2人(33.3%) 当我运行代码时,它只输出:“0头(0.0)”。所以我假设它不会因为某种原因进入第二个while循环,或

我试图解决的问题来自《构建Java程序》一书,其格式如下:

编写一个名为coinFlip的方法,该方法接受一个扫描器,该扫描器表示头部(H)或尾部(T)的硬币翻转的输入文件。考虑每一行是一个单独的硬币翻转集合,并输出该行中的头数和百分比。如果超过50%,打印“你赢了!”

考虑以下文件:
ht
T T T h

对于上述输入,您的方法应产生以下输出:

3人(60.0%)
你赢了
2人(33.3%)

当我运行代码时,它只输出:“0头(0.0)”。所以我假设它不会因为某种原因进入第二个while循环,或者我使用了错误的“next”方法

import java.io.*;
import java.util.*;
public class CoinFlip {
    public static void main(String[] args) throws FileNotFoundException{
          Scanner input = new Scanner("Series1.txt");
          PrintStream output = new PrintStream("Output.txt");
          coinFlip(input, output);
    }
    public static void coinFlip(Scanner input, PrintStream output) {
        while(input.hasNextLine()) {
            Scanner linesc = new Scanner(input.nextLine());
            int headCount = 0;
            int totalNums = 0;
            while(linesc.hasNext()) {
                String letter = linesc.next();
                if(letter.equalsIgnoreCase("H")) {
                   headCount++;
                }
            totalNums++;
            }

            double percent = findPercentage(headCount, totalNums);
            output.println(headCount + " heads " + "(" + percent +")");
            if(percent > 50.00) {
                output.println("You win!");
            }

        }
    }
    public static double findPercentage(int num1, int num2 ) {
       double percentage = (double)num1/num2 * 100;
       return percentage;
    }
}

1-它是
equalsIgnoreCase
-您缺少一个
s

if (letter.equalsIgnoreCase("H")) {
2-您不是在读取文件
Series1.txt
,而是在读取字符串“Series1.txt”。使用


如前所述,调试应该会有所帮助。一个非常简单的选择:添加
System.out.println(字母)在测试其值之前…

您需要调试您的程序,以准确了解发生了什么。这里有一个提示:不要使用
=
来比较
字符串
值。改用
equals()
方法。我刚将它改为letter.equalsIgnoreCase(“H”),但它仍然输出相同的输出,请调试程序。程序的执行与您的预期有什么不同?不要假设它从未进入第二个while循环。确认这是否属实,然后调查原因。正如建议的那样,我多次尝试调试我的代码(手动调试,因为我还没有学会如何使用eclipse调试器),并让同行对我的代码进行了审查。他相信我的代码没有任何问题,从逻辑上讲应该是可行的。然而,有一条警告指出:“资源泄漏:'linesc'从未关闭”。这可能是问题所在吗?感谢您的帮助,我真的很感激。其他地方有很多资源可以帮助您使用Eclipse调试程序理想情况下,该文件应该作为类中的流读取loader@cricket_007也许,这取决于文件的位置,它是一个JAR,其他条件(比如从标准输入读取)@PedroGonzalez,如果你想进行严肃的编程,你应该学会使用调试器……根据我的经验,仅仅是
新文件
并不是超级可靠的,至少在不同的程序之间工作是如此IDEs@cricket_00720年的爪哇,可以;不要说它不可靠。。。更像是使用不同默认工作目录的IDE(可通过设置更改)<代码>文件
只是一个路径,在这种情况下,就是文件名。
Scanner input = new Scanner(new File("Series1.txt"));