为什么不读while语句?
问题描述:
我有以下信息的.dat文件:为什么不读while语句?
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语句,我想不出什么我做错了。它不仅总是绕过它,第一个语句永远不会结束,所以它永远循环。本书在他们的例子中使用了.dat文件。我用记事本创建文件并将其保存为.dat文件。这可能是我的问题吗?
请指教。
答
fileInput.hasNext()
后面必须跟着next()
,以便令牌被消耗并且文件向前移动。
否则,文件位置总是开始,并且总是有下一个标记('Erik'),并且永远不会有下一个int。
通常情况下,我想:
while(fileInput.hasNext()){
System.out.println("Kid's name: " + fileInput.next());
// Rest of your code
+0
啊我现在看到了,好的,非常感谢你的帮助! – comfortablyNumb 2014-09-26 18:33:18
扫描器从不读取下一行。 – blagae 2014-09-26 18:31:23
while(fileInput.hasNext()只是确认流中有一个标记,你需要实际读取它才能前进 – jpw 2014-09-26 18:31:53