程序只读取文件中的第一行

时间:2014-03-10 15:19:04

标签: java

我正在尝试读取一个文件,其中包含一行上的名称,后面跟着第二行的数字。第3行是名称,第4行是数字,依此类推。

我在main方法上测试了它。例如,我的文件包含名称“Bobby”,他的telno是123456,当我运行lookUpEntry(“Bobby”)时,我应该让他的telno返回给我。如果名称“Bobby”是文件的第一个名称,则此方法有效。如果它不是第一个,程序似乎识别出名称并返回null。一直在破解它,无法看到问题。如果你看到任何一个,请建议。谢谢。

//DirectoryEntry is a class and contains a String name and String telno along with set/ get methods for them. 
private DirectoryEntry[] theDirectory = new DirectoryEntry[100];
private int size = 0;

public void loadData(String sourceName) {
        try {
            Scanner in = new Scanner(new File(sourceName));

            while (in.hasNextLine()){
                String name = in.nextLine();
                String telno = in.nextLine();
                theDirectory[size] = new DirectoryEntry(name, telno);
                size++;
            }
            in.close();
        }catch (FileNotFoundException e){
            System.out.println("File not found.");
        }
    }

public String lookUpEntry(String name) {
        find(name);
        if (find(name) >= 0){
            return theDirectory[find(name)].getNumber();
        }
        else{
            return null;
        }
    }

public int find(String name){
        for (int x=0; x < theDirectory.length; x++){
            if (theDirectory[x].getName().equals(name)){
                return x;
            }
            else{
                return -1;
            }
        }
        return  -1;
    }

以下是文件内容:

Alan A

123456

Bobby B

234567

查理C

456789

Daniel D

567891

Eric E

787454

3 个答案:

答案 0 :(得分:3)

在find方法中,遍历数组,但使用if,else块。基本上,如果您要查找的名称不在索引0处,则代码将跳转到else语句并返回-1。

编辑:等等抱歉,我还没有看到你在主代码中使用这个功能......还有一些你应该修复的东西。

编辑2:那不是你的主要方法......再抓一遍......

固定代码:

public int find(String name){
    for (int x=0; x < theDirectory.length; x++){
        if (theDirectory[x].getName() != null && theDirectory[x].getName().equals(name)){
            return x;
        }
    }
    return  -1;
}

答案 1 :(得分:1)

在find中获取else语句。在第一次检查后它返回-1。找到应该是:

public int find(String name){
    for (int x=0; x < theDirectory.length; x++){
        if (theDirectory[x].getName() != null && theDirectory[x].getName().equals(name)){
            return x;
        }
    }
    return  -1;
}

答案 2 :(得分:0)

如果您要查找的内容不在第一个元素,您将从public int find(String name)方法返回-1

这是它应该是什么样子

public int find(String name) {

    for (int i=0; i<size; i++)
        if (theDirectory[i].getName() != null && theDirectory[i].getName().equals(name))
            return i;
    return -1;
}