2014-09-26 87 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

相關問題