【发布时间】:2018-01-09 00:16:53
【问题描述】:
我要解决的问题来自Building Java Programs一书,格式如下:
编写一个名为 coinFlip 的方法,该方法接受一个扫描器,该扫描器表示一个硬币翻转的输入文件,该文件是正面 (H) 或尾部 (T)。将每一行视为一组单独的掷硬币,并输出该行中正面朝上的数量和百分比。如果超过 50%,则打印“You Win!”。
考虑以下文件:
H T H H T
T t t T h 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;
}
}
【问题讨论】:
-
你需要调试你的程序来弄清楚到底发生了什么。不过这里有一个提示:不要使用
==来比较String的值。请改用equals()方法。 -
我只是将其更改为 letter.equalsIgnoreCase("H") 但它仍然输出相同的输出
-
那么请调试你的程序。程序的执行与您的预期有何不同?不要假设它永远不会进入第二个 while 循环。确认这是否属实,然后调查原因。
-
按照建议,我尝试多次调试我的代码(手动调试,因为我还没有学习如何使用 Eclipse 调试器)并且我让同行评审了我的代码。他认为我的代码没有任何问题,并且从逻辑上讲它应该可以解决。但是,有一条警告说明:“资源泄漏:'linesc' 永远不会关闭”。这可能是问题吗?感谢您的帮助,我真的很感激。
-
其他地方有很多资源可以帮助您使用 Eclipse 调试器
标签: java file io java.util.scanner