0

HashMap セットがあり、スキャナーを使用してユーザーから文字列入力を取得します。ユーザー入力文字列を取得し、ハッシュマップで表す値を追加して、メッセージ全体の幅を計算します。

たとえば、「test」と入力するとします。hashmap の t の値は 2、e の値は 3、s の値は 3、t の値も 2 です。値をすべて足すと 10 になります。

System.out.print("How much width do you want i to have? ");
int i = input.nextInt();

System.out.println("\nEnter the string input:");
Scanner scan = new Scanner(System.in);
String user_input = scan.nextLine();

Map<String,Integer> map = new HashMap<String,Integer>();

            map.put("a", i*2);
            map.put("b", i*2);
            map.put("c", i*2);
            map.put("d", i*2);
            map.put("e", i*3);
            map.put("f", i*2);
            map.put("g", i*2);
            map.put("h", i*2);
            map.put("i", i*1);
...down to z

ご存知のように、すべてのキーの値は i の値に関連しているため、値を i*n に設定しています。

私は試した:

int count = map.containsKey("a") ? map.get("a") : 0;
map.put("a", count + 1);

しかし、それは単にキー「a」の値が何に設定されているかを教えてくれます。文字列の各文字をハッシュマップで実行し、値を取得して、各値を加算する必要があります。次に、合計金額を取得します。文字列内の各文字を一度に 1 つずつ反復するには、for ループが必要になることはわかっています。明らかに、コードの重要な部分が抜けています。

また、ハッシュマップに a がいくつ存在するか、b がいくつ存在するかなどを直接設定することは可能でしょうか? 文字を追加/削除できる柔軟な配列リストを設定しましたが、ハッシュマップでそれを行うことができれば、作業が簡単になります。

ありがとう!

4

1 に答える 1

1
int sum = 0;
for(int i = 0; i < user_input.length(); i++) {
    sum += map.get(user_input.charAt(i));
}

Scala のような関数型言語を使用する反復を避けることができます。または、折りたたみ機能を追加する:リンク

于 2013-04-27T22:45:36.400 に答える