こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

HashMap(J2SDK1.4.2_09)について

import java.util.*;

class BubbleSort {
public static void Sort(double[] a) {

HashMap hmap = new HashMap(); // ☆
int m, i, j;
double n, t;

for(i=0; i<a.length; i++) {
hmap.put(a[i], i); // (1)
}

for(i=0; i<a.length; i++) {
m = hmap.get(a[i]); // (2)
if(m >= 9) {
System.out.println("キー " + (m+1) + " の値=" + a[i]);
}
else {
System.out.println("キー " + (m+1) + " の 値=" + a[i]);
}
}
}

public static void main(String args[]) {

double[] a = {7.6, 7.8, 5.6, 4.1, 0.3, 9.9, 1.5, 8.1, 7.1, 5.3};

Sort(a);
}
}


上記のように、(1)ではkey(main文にある各配列要素)をvalue(keyの要素に対応する番号)に対応付けする、(2)では指定したキーに対応した値を返す、といったことをしたいのですが、エラーが出てしまいコンパイルできません。J2SDK5.0では、☆の部分を、

HashMap<Double,Integer> hmap = new HashMap<Double,Integer>();

のようにすればコンパイル、実行できます。しかし事情があって1.4でしたいのです。どのようにすればできるでしょうか?宜しくお願いします。

投稿日時 - 2005-10-11 01:26:56

QNo.1705742

すぐに回答ほしいです

質問者が選んだベストアンサー

下記のように書いてみて下さい。
注意事項としては、HashMapクラスに格納できるのは、キー、値とも、Objectクラスのサブクラスだけです。
ですので、intとかdoubleとか、プリミティブな変数は格納できません。
下記では、キー、値ともに、Stringクラスに変換してから格納しています。

public static void Sort(double[] a) {

HashMap hmap = new HashMap(); // ☆
int m, i, j;
double n, t;

for(i=0; i<a.length; i++) {
hmap.put(Double.toString(a[i]), Integer.toString(i));
}

for(i=0; i<a.length; i++) {
m = Integer.parseInt((String)hmap.get(Double.toString(a[i]))));
if(m >= 9) {
System.out.println("キー " + (m+1) + " の値=" + a[i]);
} else {
System.out.println("キー " + (m+1) + " の 値=" + a[i]);
}
}
}

投稿日時 - 2005-10-11 12:16:44

お礼

ふむふむ。、HashMapクラスに格納できるのは、キー、値とも、Objectクラスのサブクラスだけなのですね。そして、Stringクラスに変換しなければ格納できないのですね。自分が見た参考書にはそんなに詳しく書かれていませんでしたのでとても助かりました。
詳しい説明とソースをありがとうございました。

投稿日時 - 2005-10-11 23:46:33

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>型の不一致: Integer から int には変換できません。
では
m = ((Integer)(hmap.get(new Double(a[i])))).intValue(); // (2)
では

投稿日時 - 2005-10-11 04:32:48

お礼

おおっ!実行できました!
Integerクラスの値をさらにintValueメソッドでintで返すなんて分かりませんでした。
ありがとうございます。

投稿日時 - 2005-10-11 23:23:48

ANo.1

hmap.put(new Double(a[i]), new Integer(i)); // (1)
m = (Integer)hmap.get(new Double(a[i])); // (2)
でどうでしょう

投稿日時 - 2005-10-11 02:18:32

お礼

返信ありがとうございます。
早速試してみたのですが、(2)がうまくコンパイルが通らず、

型の不一致: Integer から int には変換できません。

と出ました。なぜなんでしょうか?
何度もすみません。
プログラム環境はeclipse3.1.1です。

投稿日時 - 2005-10-11 02:40:18

あなたにオススメの質問