0

プログラムは、If ステートメントに基づいて誤ったキーと値を出力します。誰かが理由を説明できますか?

例 キー = アンクルトム + 値 = 02086542222 キー = ハリー + 値 = 020826262

クエリ=アンクルトム

戻り値 = キー = ハリー + 値 = 00826262

以下のドキュメントの状態からの引用:

「より正式には、このマップに (key==null ? k==null : key.equals(k)) のようなキー k のマッピングが含まれている場合にのみ、true を返します」

そのため、 if(Contacts.containsKey(query))はkey.equals(k)を使用して入力クエリをキーと比較するという印象を受けました。

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class HRHashMap {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);

        Map<String, Integer> Contacts = new HashMap<String, Integer>();//Specify HashMap of type String

        int numOfContacts = scan.nextInt();
        scan.nextLine();

        //Add contacts
        for (int i = 0; i < numOfContacts; i++) {
            String contactName = scan.nextLine();
            int contactNumber = scan.nextInt();
            scan.nextLine();
            Contacts.put(contactName, contactNumber);
        }

        //Iterate over the Map
        for (Entry<String, Integer> entry : Contacts.entrySet()) {
            String query = scan.nextLine();
            if (Contacts.containsKey(query)) {
                //System.out.println(Contacts.get(query));
                System.out.println(entry.getKey() + "=" + entry.getValue());
            } else {
                System.out.println("Not found");
            }
        }

    }
}
4

2 に答える 2

2

プログラムは、マップ内のすべてのエントリを繰り返し処理し、エントリごとに何らかの入力 ( query) を要求しquery、 がマップ内のキーであるかどうかを確認し、現在アクセスしているエントリ ( とはまったく関係ありません) を出力しqueryます。

したがって、出力は「正しい」ように見えます。マップには「Uncle Tom」が含まれているため、最初のエントリ (「Harry」) の出力に進みます。「最初」は HashMap のあいまいな概念であり、エントリの反復順序は指定されていないことに注意してください。

すべてのエントリをループする理由はよくわかりませんが、コメントアウトした行 (一致するエントリを出力するquery) の方が適切に機能する可能性があります。

System.out.println(Contacts.get(query));
于 2019-01-27T11:32:17.460 に答える