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()そのFriendlyの名前を返すというメソッドを作成します。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

ここで変数の名前を変更することをお勧めします。Friendliesクラスには、1人の連絡先、Friendが格納されていると思います。Friendオブジェクトのリストは、friendListまたはfriendliesという名前を付けることができる配列です。また、サイズをカウンター変数として使用しないことをお勧めします。サイズは友達の数であり、iまたはfriendCounterを使用してそれらを反復処理するか、以下に示すようにforeachループを使用できます。

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を使用している場合は、このコードを自動生成してから微調整して、必要な形式を取得できます。(メソッドを記述したい場所を右クリックして、コードの挿入を選択するだけです)

于 2012-06-14T14:47:41.160 に答える
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 に答える