为什么不读取声明?

时间:2014-09-26 18:27:06

标签: java

我有一个.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文件。这可能是我的问题吗?

请告知。

1 个答案:

答案 0 :(得分:5)

fileInput.hasNext()必须后跟next(),以便使用令牌并将文件向前移动。

否则,文件位置始终是开始,并且始终存在下一个标记('Erik'),而不是下一个int。

通常,我会:

while(fileInput.hasNext()){
    System.out.println("Kid's name: " + fileInput.next());
    // Rest of your code