为什么我的学生字符串不能打印出来?

时间:2014-04-28 20:07:39

标签: java

我有三个小的java类,我试图从文件中读取一些数据并将其打印出来。这是我的代码,它们很短。

Student.java

package students;

import java.text.*;

public class Student{
    private String name;
    private int age;
    private double gpa;

    public Student(String name, int age, double gpa){
        this.name = name;
        this.age = age;
        this.gpa = gpa;
    }

    public String toString(){
        String gpa_string = new DecimalFormat("#.##").format(gpa);
        return name + " " + Integer.toString(age) + " " + gpa_string + "\n";
    }
}

Students.java

package students;

import java.util.*;
import java.io.*;

public class Students {
    public static final int MAX = 100;
    private Student students[];
    private int count;

    public void readFile(String path) throws IOException{
        students = new Student[MAX];
        Scanner x = new Scanner(new File(path));
        count = 0;
        while (x.hasNextLine() && count < MAX){
            String name = x.nextLine();
            if("".equals(name)){
                System.out.println("Breaking out of loop");
                break;
            }
            System.out.println(name);
            int age = x.nextInt();
            System.out.println(age);
            double gpa = x.nextDouble();
            System.out.println(gpa);
            students[count] = new Student(name, age, gpa);
            count += 1;
            System.out.println(count)
        }
        x.close();
    }

    public String toString(){
        String result = "";
        for(int i = 0; i < count; ++i)
            result += students[i].toString();
        return result;
    }

Driver.java

package students;

import java.io.*;

public class Driver {
    public static void main(String[] args) throws IOException{
        Students students = new Students();
        students.readFile("Students.txt");
        System.out.print(students.toString());
    }
}

这就是Students.txt的样子:

Name0
22
1.2
Name1
22
2.71
Name2
19
3.51

我期待看到这个:     名称0 22 1.2     名称1 22 2.71     姓名2 19 3.51

但我完全没有输出。我不确定发生了什么。是否找不到文件?我来自python,似乎try: ... except: pass类似事情正在进行throws IOException的事情。

我正在使用Eclipse,我在src文件夹,bin文件夹和工作区顶部都有Students.txt,因为我不知道它需要去哪里。

修改

在更改了while循环的条件并添加了一堆打印语句之后,我让它读取了一个学生。现在的输出是:     NAME0     22     1.2     1     打破循环     姓名0 22 1.20

我不明白为什么它会在1循环后停止。

2 个答案:

答案 0 :(得分:4)

以下条件:

 x.hasNextLine() &&x.hasNextInt() && x.hasNextDouble() && count < MAX

将始终评估为falsex如何同时拥有下一个IntDouble?想想输入文件的格式。也许你可以使用制表符分隔(或任何其他分隔符),假设一行 - 一个学生?在这种情况下,if x.hasNextLine

内只有一个条件实现阅读方法要容易得多

答案 1 :(得分:2)

while (x.hasNextLine() &&x.hasNextInt() && x.hasNextDouble() && count < MAX)

想想这个有条件的......

hasNextInt( )hasNextDouble( )是互斥的,所以它总是会返回false。

从概念上讲,理解x.hasNexInt()并不意味着“x在某个地方有另一个int”,这意味着x中的 next 元素是一个int 。

另外,不相关但是:一般来说,当你发现自己有这样的条件语句时(根据经验有多个&&),你应该问自己是否真的可以简化条件把它分成多个陈述。

编辑: (响应您的更新)尝试在没有if("".equals(name))子句的情况下运行它。我没有立即明白为什么它会在预期之前被触发,但是你的输出表明它是,并且无论如何这个子句似乎是多余的:顶部的hasNextLine( )条件已经提供了退出循环的机制在数据集的末尾。有些情况下需要进行这样的二次检查,但要问问自己是否在一个。