【问题标题】:Iterating a string through the key values of hashmap letter-by-letter to get sum通过 hashmap 的键值逐个字母迭代字符串以获得总和
【发布时间】:2013-04-21 19:52:40
【问题描述】:

我有一个 HashMap 集,我使用 Scanner 从用户那里获取字符串输入。我想获取用户输入字符串,然后通过添加它们在 Hashmap 中表示的值来计算整个消息的宽度。

例如,假设您输入“测试”。 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' 的值是什么。我需要通过哈希图运行字符串的每个字母,获取值,并将每个值加在一起。然后得到总和。我知道这需要一个 for 循环来一次遍历字符串中的每个字母。显然,我在代码中遗漏了一些重要部分。

另外,是否可以直接在hashmap中设置存在多少a,存在多少b等?我为此设置了一个灵活的数组列​​表,可以让我添加/删除字母,但如果我可以在 hashmap 中做到这一点,它会让事情变得更容易。

谢谢!

【问题讨论】:

  • 您的问题开始谈论总和,并结束询问计数(以不太清楚的方式)。您可能需要映射 - 一个用于计数并用于计算总和。
  • 好吧,如果我可以得到字符串输入中的字符数,我可以通过简单地将字符串中每个字符的键值相加来计算总和。这几乎就是我目前试图找出编码部分的地方
  • 不清楚您的问题在这里。请编辑您的帖子并提出明确的问题,否则将被关闭。

标签: java string loops map hashmap


【解决方案1】:
int sum = 0;
for(int i = 0; i < user_input.length(); i++) {
    sum += map.get(user_input.charAt(i));
}

您可以避免使用 Scala 等函数式语言的迭代。 或者添加一些折叠功能:link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2017-06-08
    • 1970-01-01
    • 2018-10-29
    • 2012-03-06
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多