我正在尝试读取一个文件,其中包含一行上的名称,后面跟着第二行的数字。第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 E787454
答案 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;
}