0

3つのクラスで連絡先リストを作成しました。ContactListクラスには、姓、名、番地、市区町村、都道府県、郵便番号、国、電子メール、電話番号、メモを格納する配列が含まれています。

ContactListのクラスに姓による検索機能を実装したいのですが、ユーザーが検索した姓の連絡先のすべての情報が表示されますが、何も機能しないようです。:(

import java.util.*;

public class ContactList {

    //declaration of an array and its attributes
    private final int SIZE = 10;
    private Person [ ] list;
    private int nextEmptyElementInArray = 0;

    // Constructor for ContactList object
    public ContactList ()   {
        list = new Person [SIZE];
    }

    // Method that adds a new contact into the array
    public void addNewContact() {
        list[nextEmptyElementInArray] = new Person();
        list[nextEmptyElementInArray].read();
        nextEmptyElementInArray++;
    }

    // Method retrieves contacts by last name

    int searchByLastName(Person [] list) {
        Scanner console;
        console = new Scanner(System.in);
        String searchByLastName = console.next();
        for (int i= 0; i< list.length; i++) {
            if (list[nextEmptyElementInArray].lastName.equals(searchByLastName)) 
                return i;
            }
            return -1;
        }
    }
4

2 に答える 2

2

list付き文字が間違っているようです。ループを繰り返すたびに、次のようになります。

if (list[nextEmptyElementInArray].lastName.equals(searchByLastName))

私が質問を正しく理解している場合、あなたはこれを行うべきです:

if (list[i].lastName.equals(searchByLastName))

また、変数の名前を関数と同じにするように注意してください。せいぜいそれは混乱を引き起こすでしょう。

[編集]リストを事前に割り当ててから、を使用して実際のコンテンツの長さを管理していることに気づきましたnextEmptyElementInArray。ループforはおそらく次のようになります。

for (int i= 0; i< nextEmptyElementInArray; i++)
于 2013-03-25T01:22:27.740 に答える
0

検索方法を次のように変更することをお勧めします

 int searchByLastName(Person [] list, String lastName) {
        for (int i= 0; i < list.length; i++) {
            if (list[i].lastName.equals(lastName)) 
                return i;
            }
        }
        return -1;
  }

この関数の外部のコンソールからlastNameを読み取り、それを検索パラメーターとして渡します

于 2013-03-25T04:51:23.003 に答える