2014-09-26 46 views
0

我有以下信息的.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文件。这可能是我的问题吗?

请指教。

+0

扫描器从不读取下一行。 – blagae 2014-09-26 18:31:23

+1

while(fileInput.hasNext()只是确认流中有一个标记,你需要实际读取它才能前进 – jpw 2014-09-26 18:31:53

回答

5

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