Java 从档案中数硬币的数量
我试图解决的问题来自《构建Java程序》一书,其格式如下: 编写一个名为coinFlip的方法,该方法接受一个扫描器,该扫描器表示头部(H)或尾部(T)的硬币翻转的输入文件。考虑每一行是一个单独的硬币翻转集合,并输出该行中的头数和百分比。如果超过50%,打印“你赢了!” 考虑以下文件: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循环,或
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"));