我有一个.dat文件,其中包含以下信息:
Erik 3 Rita 7 Tanner 14 Jillyn 13 Curtis 4 Stephanie 12 Ben 6
它显示男孩的名字,男孩的年龄,女孩的名字,女孩的年龄等。
我必须计算男孩总数和女孩总数,然后加上男孩的年龄和女孩的年龄,然后找出它们之间的差异(绝对)。
我创建了以下代码来执行此操作:
public class Exercise1 {
public static void main(String[] args)
throws FileNotFoundException {
Scanner input = new Scanner(new File(
"C:/FilesForJava/ChapterSixExerciseOne.dat"));
boyGirl(input);
}
public static void boyGirl(Scanner fileInput) {
int boysCount = 0, girlsCount = 0, counter = 1,
boysSum = 0, girlsSum = 0;
while(fileInput.hasNext()){
if(counter % 2 != 0) {
boysCount++;
}
else {
girlsCount++;
}
while(fileInput.hasNextInt()) {
if(counter % 2 != 0) {
boysSum += fileInput.nextInt();
}
else {
girlsSum += fileInput.nextInt();;
}
}
counter++;
}
System.out.println(boysCount + "Boys, " + girlsCount + "Girls");
System.out.println("Difference between boys' and girls' sums: " + Math.abs(boysSum - girlsSum));
}
问题是程序永远不会进入嵌套的while语句,我无法弄清楚我做错了什么。它不仅总是绕过它,第一个while语句永远不会结束,所以它永远循环。本书在他们的例子中使用了.dat文件。我使用记事本创建文件并将其保存为.dat文件。这可能是我的问题吗?
请告知。
答案 0 :(得分:5)
fileInput.hasNext()
必须后跟next()
,以便使用令牌并将文件向前移动。
否则,文件位置始终是开始,并且始终存在下一个标记('Erik'),而不是下一个int。
通常,我会:
while(fileInput.hasNext()){
System.out.println("Kid's name: " + fileInput.next());
// Rest of your code