我有一个HashMap集,我使用Scanner从用户那里获取String输入。我想获取用户输入字符串,然后通过添加它们在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);
但这只是告诉我关键&#39; a&#39;的价值。被设置为。我需要通过hashmap运行字符串的每个字母,获取值,并将每个值一起添加。然后得到总和。我知道这需要一个for循环一次迭代字符串中的每个字母。显然,我错过了代码中的一些重要部分。
此外,是否可以直接设置为hashmap存在多少个b,有多少b存在等等?我设置了一个灵活的arraylist,它可以让我添加/删除字母,但如果我可以在hashmap中执行它,它会使事情变得更容易。
谢谢!
答案 0 :(得分:1)
int sum = 0;
for(int i = 0; i < user_input.length(); i++) {
sum += map.get(user_input.charAt(i));
}
您可以避免使用像Scala这样的函数式语言的迭代。 或者添加一些折叠功能:link