私のJava=クラス(明らかに)のために取り組んでいるプロジェクトがあり、ツリーマップとの対話方法についての講義を見逃したに違いありません。私は何をしているのかわかりませんこの部分と私はグーグルからの多くの助けを見つけていません。
プログラムの最初のケースでは、TreeMapのすべての値を出力する必要があります。以下は、提供されたコードとそれを使って行った作業です。ケースAのすべてが私のものですが、機能していません。任意の助けいただければ幸いです。
import Java.util.Scanner;
import Java.util.Set;
import Java.util.Map;
import Java.util.TreeMap;
import Java.io.File;
import Java.io.FileNotFoundException;
public class prog7 {
public static void main(String args[])
throws FileNotFoundException
{
Scanner kb=new Scanner(System.in);
/*here, add code to declare and create a tree map*/
TreeMap treeMap = new TreeMap();
/*here, add code to declare a variable and
let it be the key set of the map
*/
String key;
//temporary variables
String tempWord;
String tempDef;
//the following code reads data from the file glossary.txt
//and saves the data as entries in the map
Scanner infile=new Scanner(new File("glossary.txt"));
while(infile.hasNext())
{
tempWord=infile.nextLine();
tempDef=infile.nextLine();
/*here, add code to add tempWord and tempDef
as an entry in the map
*/
treeMap.put(tempWord, tempDef);
}
infile.close();
while(true)
{
System.out.println();
System.out.println();
//show menu and Prompt message
System.out.println("Please select one of the following actions:");
System.out.println("q - Quit");
System.out.println("a - List all words and their definitons");
System.out.println("b - Enter a Word to find its definition");
System.out.println("c - Add a new entry");
System.out.println("d - Delete an entry");
System.out.println("Please enter q, a, b, c or d:");
String selection=kb.nextLine(); //read user's selection
if (selection.equals("")) continue; //if selection is "", show menu again
switch (selection.charAt(0))
{
case 'q':
System.out.println("\nThank you.");
return;
/*write code for the cases 'a','b','c' and 'd'
so that the program runs as in the sample run
*/
case 'a':
for (String treeKey : treeMap.keySet())
System.out.println(treeKey);
break;
KeySetではなくentrySetを反復処理します。便利なgetKey()
およびgetValue()
メソッドを持つMap.Entry<K, V>
のセットを取得します。
そうは言っても、Javaの標準のMap実装には、必要なことを行うtoString()の実装があります。もちろん、あなたはそれを再実装するためのポイントを得るだけであり、巧みにそれを回避するためではないと思います...
for (Map.Entry<K, V> entry : myMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ". Value: " + entry.getValue());
}
EntrySet()を使用できます。 Javaのすべてのマップにこのメソッドがあります。
Map<String, String> tree = new TreeMap<String, String>();
tree.put("param1", "value1");
tree.put("param2", "value2");
for (Entry<String, String> entry : tree.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.printf("%s : %s\n", key, value);
}
for (String treeKey : treeMap.keySet())
それはあなたに鍵を与えます。
次に、そのループで、キー(treeMap
)を使用してtreeKey
から各値を取得し、出力します。
ループ内でtreeMap.get(treeKey)
を使用して、キーの値を取得できます。この値は文字列なので、次のようにすることができます。
System.out.println("The value for the current key is " + (String)treeMap.get(treeKey));
特にTreeMapsについてではなく、Maps全般について-Guavaを使用して、この最初の回答が好きです: Convert Javaカスタムキーにマップ=値文字列
キーのセットを繰り返し処理してから各値を取得することは、エントリのセット(getEntries()
)を繰り返し処理するよりも効率的ではありません。前者の場合、getValue()
は毎回新しいルックアップを実行する必要がありますが、getEntries()
は単純にマップのコンテンツ全体を返すことができます。
FindBugsなどの静的アナライザーは、マップのキーの反復内で値を取得しようとすると警告を表示します。