0

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

我有

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

4 回答 4

1

在您的Friendlies类中,有一个调用方法,该方法getName()将返回该友好的名称。遍历fr直到找到匹配的名称。找到该名称后,使用类似get的方法打印出Friendly您刚刚找到的匹配所需的所有信息。

于 2012-06-14T14:41:17.453 回答
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;

}

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

于 2012-06-14T14:41:30.293 回答
0

假设 AccessFriendlyFile 将数据加载到您的数组中,如果您想检索所有匹配的名称,您可以使用 for each 循环:

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 异常。

于 2012-06-14T14:45:09.580 回答
0

我建议你在这里重命名你的变量。我认为,Friendlies 类存储一个联系人,一个朋友。Friend 对象列表是一个数组,您最好将其命名为friendList 甚至friendlies。我还鼓励您不要将大小用作计数器变量。大小是您有多少朋友,您可以使用 i 或friendCounter 遍历它们,或者使用a for each 循环,如下所示,

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);

我的代码假设您在友谊赛中实现了 toString()。如果您使用 netbeans,您可以自动生成此代码,然后对其进行调整以获得您想要的格式。(只需右键单击要编写方法的位置并选择插入代码)

于 2012-06-14T14:47:41.160 回答