ファイルから読み取ってHashMap<String, HashMap<String, Integer>>
.
inputFile の形式は次のとおりです。
A B C D
1 -1 2 -3
2 3 -5 3
-3 2 7 -5
4 3 1 1
この入力ファイルは、すべてのポイント ペア間の距離を表します。つまり、次の行列を表します。
A B C D
A 1 -1 2 -3
B 2 3 -5 3
C -3 2 7 -5
D 4 3 1 1
マップの作成中にキーと値を出力すると、正しい値が出力されます。しかし、マップを完全に作成した後にマップを印刷しようとすると、外側のマップのキーのみが正しく印刷されます。他のすべては として出力されnull
ます。
私は何を間違っていますか?
public static HashMap<String, HashMap<String, Integer>> initMap() {
HashMap<String, HashMap<String, Integer>> distancesMap = new HashMap<String, HashMap<String, Integer>>();
final String distancesFileName = "/home/name/workspace/Tester/src/main/distances.txt";
String distancesFile = Main.readInputFile(distancesFileName);
String[] distancesFileArray = distancesFile.split("\n");
String[] firstLine = distancesFileArray[0].split("\t");
for(int iii = 1; iii < distancesFileArray.length; iii++) {
HashMap<String, Integer> tempMap = new HashMap<String, Integer>();
String[] singleLineArray = distancesFileArray[iii].split("\t");
for(int jjj = 0; jjj < singleLineArray.length; jjj++) {
tempMap.put(firstLine[jjj], Integer.parseInt(singleLineArray[jjj]));
// the following print statement (commented out) prints the correct values
// System.out.println(firstLine[jjj] + " " + tempMap.get(firstLine[jjj]));
}
distancesMap.put(firstLine[iii - 1], tempMap);
}
/*
* The following lines just print the key of the outer map correctly
* but everything else is printed as null
*/
for(String key : distancesMap.keySet()) {
System.out.print(key + "\t"); // prints the correct String value
HashMap<String, Integer> tempMap = distancesMap.get(key);
for(String innerKey : tempMap.keySet()) {
// the following line only prints null values
System.out.print(tempMap.get(innerKey + "\t"));
}
System.out.println();
}
return distancesMap;
}
これから得られる出力は次のようなものです。
B nullnullnullnull
C nullnullnullnull
D nullnullnullnull
A nullnullnullnull