1

私はJavaが初めてなので、「迷惑な」問題がいくつかあります。と を含むクラス Employee がありint idNumberますint phone number。次に、LinkedList<Employee>並べ替えがありidNumberます。ある の電話番号を変更したいidnumber。私はイテレータを扱ってきましたが、それが正しいかどうかはわかりません。

public void setNewPhoneNumber(int idnumber, int newphone){
        Iterator<IndexC> it = listEmployee.iterator();   
        IndexC employeeTemp = null;

        boolean found = false;
        while(it.hasNext() && !found){ 
                employeeTemp = it.next();
                if(employee.getIdNumber()== idnumber){
                    employeeTemp.setNewPhoneNumber(newphone);
                    found = true; 
                }
        }  
}

ええ、employee.setNewPhoneNumber間違っていることはわかっていますが、リンクリストの値を変更する正しい方法はわかりません。(ネイティブスピーカーではなく、下手な英語でごめんなさい)

4

5 に答える 5

2

イテレータは苦痛です。foreachコンストラクトの方がはるかに優れています。

public void setNewPhoneNumber(int idnumber, int newphone) {
        for (Employee employee : listEmployee)
                if (employee.getIdNumber() == idnumber) {
                    employee.setNewPhoneNumber(newphone);
                    return; 
                }
}

IndexCが何であるかはわかりません。また、LinkedListを使用することはあまりありません。ここでは微妙な点が欠けている可能性がありますが、イテレータは避けたほうがよいと思います。

于 2009-05-09T01:02:23.803 に答える
1
  • 「リンクされたリストのパラメーターを変更する」のではなく、リスト内のオブジェクトを見つけて、そのオブジェクトのプロパティを変更しようとしています
  • List の代わりに Map (HashMap など) を使用する必要があります。そうすれば、反復する必要はありません。
  • 反復する場合は、for ループを使用します。for(IndexC employeeTemp: employeeTemp){}
  • 電話番号の変更は、従来はメソッドを介して行われますsetPhoneNubmer()が、そのようなメソッドがあるかどうかは完全にIndexCクラスに依存します。そのクラスの定義を見てください。
  • 質問するときは、必ずエラー メッセージを含めてください。「うまくいかない」というのは、本当に役に立たない情報です。
于 2009-05-09T00:45:02.097 に答える
0

それが機能しない理由の1つは、(employee.getIdNumber()== idnumber)を満たすIndexCがリストにないことです。

たぶん、あなたはいくつかの追加のコードを投稿する必要があります、例えば、そのリストはどこに作成されていますか、あなたはそれを何かで埋めましたか?

その上、機能しないのは何ですか?新しい電話番号を設定しますか、それともリストから要素を取得しますか?

どちらの場合も、両方の方法を投稿する必要があると思います。

getIdNumber();

Mike B.が言うように、おそらくMap実装を使用する方が良いでしょう。順序を検討しているので、SortedMap(TreeMapなど)の実装の方が良いかもしれません。

いずれにせよ、remberは、IndexCの2つのメソッドをオーバーライドする必要があります(マップを使用する場合)。そうしないと、物事が乱雑になります。

  • 等しい
  • ハッシュコード
于 2009-05-09T00:55:23.587 に答える
0

私の悪い、IndexC は Employee クラスです、「悪いコピー過去」申し訳ありません。LinkedList は好きではありませんが、+5000 エントリ (学校の演習) で使用する必要があります。非常に多くのエントリで for を使用することはお勧めできません。セット、取得、クローンとしてのクラス..

class Manager{
private LinkedList<Employee> listE = new LinkedList<Emploee>;

public void setNewPhoneNumber(int idnumber, int newphone)
}
于 2009-05-09T01:25:11.253 に答える
-1

http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedList.html

必要なオブジェクトが見つかるまで、 int をインクリメントする for ループを使用します。次に、listEmployee.get() を使用して必要なオブジェクトを取得し、編集します。

ただし、そのような項目へのランダム アクセスが必要な場合は、Linkedlist を使用しないでください。代わりに ArrayList に貼り付けます。これにより、ランダムアクセス時間が大幅に向上します。

補足として、ID番号が0から順番に並んでいる場合、forループは必要ありません。単純に listEmployee.get(idNumber) できます

于 2009-05-09T00:47:07.583 に答える