搜索每个记录具有多个值的类数组

时间:2012-06-14 14:36:04

标签: java arrays oop search methods

我需要在一个对象数组中搜索一个Name,然后打印出与该名称对应的所有信息。

我有

public class AccessFriendlyFile {
private Friendlies[] fr = new Friendlies[100];
private int size = 0;

public AccessFriendlyFile (){
try {
    Scanner scFile = new Scanner(new File("Friends.txt"));
    String line, name, surname, cell, mail, landline;

    while (scFile.hasNext()){
        line = scFile.nextLine();
        Scanner sc = new Scanner(line).useDelimiter("#");
        name = sc.next();
        surname = sc.next();
        cell = sc.next();

        if (sc.hasNext()){
            mail = sc.next();
            landline= sc.next();
            fr[size] = new ExtendFriendlies(name, surname, cell, mail, landline);

        }

        else {
            fr[size]= new Friendlies(name, surname, cell);
        }

        size++;
        sc.close();
    }

}catch (FileNotFoundException ex){
    System.out.println("File not found");
}

如何编写一个搜索“fr”名称并打印出所有相应信息的方法?

非常感谢 杰西

编辑: 这是我的搜索方法,目前无效。

public int Search(String name) {
    int loop = 0;
    int pos = -1;
    boolean found = false;
    while (found == false) {
        if (fr[loop] == name) {
            found = true;
            pos = loop;
        } else {
            loop++;
        }
    }

    return pos;
}

if语句中的无法比较的类型错误。

4 个答案:

答案 0 :(得分:1)

Friendlies课程中,有一个名为getName()的方法,该方法将返回该友好名称。迭代fr,直到找到匹配的名称。找到该名称后,请使用类似的get方法打印出您刚才找到的匹配Friendly所需的所有信息。

答案 1 :(得分:0)

这应该有效:

public List<Friendlies> search(String name) {

    List<Friendlies> list = new ArrayList<Friendlies>();
    for(Friendlies friendlies : fr) {
        if(friendlies.getName().equals(name)) {
            list.add(friendlies);
        }
    }

    return list;

}

然后,使用返回的列表,实现数据的良好显示:)

答案 2 :(得分:0)

假设AccessFriendlyFile将数据加载到您的数组中,您可以为每个循环使用a,如果您想要查找所有匹配的名称:

List<Friendlies> getByName(String searched){
   List<Friendlies> result = new Arraylist<Friendlies>();
   for (Friendlies currentFriendly : fr){
      if (searched.equalsIgnoreCase(currentFriendly.getName()){
        result.add(currentFriendly);
      }
   }
   return result;
}

仅适用于第一个:

Friendlies getByName(String searched){
   for (Friendlies currentFriendly : fr){
      if (searched.equalsIgnoreCase(currentFriendly.getName()){
        return currentFriendly;
      }
   }
   return null;
}

您应该使用列表而不是固定数组。如果文件包含超过100条记录,您将获得indexoutofbounds异常。

答案 3 :(得分:0)

我建议你在这里重命名你的变量。我认为,Friendlies类商店是一个单一的联系人,一个朋友。 Friend对象列表是一个您可能名为friendList甚至是友谊的数组。我还鼓励你不要使用size作为计数器变量。大小是你有多少朋友,你可以使用i或friendCounter迭代它们,或者如我在下面演示的那样使用每个循环,

public Friendlies find(String name) {
    for(Friendlies friend : fr) {
        if(friend.getName().equalsIgnoreCase(name))
            return fiend;
    }
    return null;

}

//now to print the info you can do this:
Friendlies findJoe = find("Joe");
if(findJoe==null)
    System.out.println("You have no friends namd Joe.");
else
    System.out.println(findJoe);

我的代码假定您在Friendlies中实现toString()。如果您使用netbeans,则可以自动生成此代码,然后调整它以获得所需的格式。 (只需右键单击要编写方法的位置并选择插入代码)