Java 在HashMap中添加整数/打印字符串(相同的HashMap)

Java 在HashMap中添加整数/打印字符串(相同的HashMap),java,string,hashmap,Java,String,Hashmap,我对HashMap没有太多经验,但我被指示使用一个。我需要将HashMap中的整数相加,并打印出同一HashMap中存在的字符串。HashMap是这样声明的 HashMap newmap=newhashmap() 我想把我要输入的所有整数(从文件读取)相加,例如,如果我有100和50,我想输出为150个总分。此外,地图还存储字符的名称,例如Carl和Sophia,因此我希望输出类似于字符:Carl,Sophia 我的问题就像我说的,我不知道怎么做,因为我对HashMap的经验很少。无论如何,非常

我对
HashMap
没有太多经验,但我被指示使用一个。我需要将
HashMap
中的
整数相加,并打印出同一
HashMap
中存在的
字符串。
HashMap
是这样声明的

HashMap newmap=newhashmap()

我想把我要输入的所有整数(从文件读取)相加,例如,如果我有100和50,我想输出为
150个总分
。此外,地图还存储字符的名称,例如Carl和Sophia,因此我希望输出类似于
字符:Carl,Sophia

我的问题就像我说的,我不知道怎么做,因为我对
HashMap
的经验很少。无论如何,非常感谢您的回复,如果您需要任何澄清,请询问谢谢

此外,为了让这个问题有意义,这个程序的目标是“拯救”角色/对象,获得类似于视频游戏的积分。最后应该显示所有获救的角色或物体以及获得的总分

编辑Hero.java

import java.util.*;
import java.io.*;
import java.awt.*;

public abstract class Hero extends Character
{
   private String heroname1;
   public Hero() {
          heroname1 = "Rick Grimes"; //the default player name
   }
   HashMap<String, Integer> newMap = new HashMap<String, Integer>();

   public Hero(String newhero) {
          if (newhero.length() > 0) {
               heroname1 = newhero;
          } else { heroname1 = "Rick Grimes"; } //defaulted as protagonist
   }

   public String getHeroName() {
          return heroname1; //return the name
   }

   public String rescue() { //class to rescue people or things
          String out = "".toString();
          for(String _key : newMap.keySet()) {
              out += heroname1 + " rescued " + _key + " " + newMap.get(_key) +!
          }
          return out;
   }

   public String toString() { //print
      return heroname1;

   }
   public String view() {
          Set<String> names = newMap.keySet();
          StringBuilder sb = new StringBuilder("Characters rescued: ");
          int i = 0;
          for (String name : names) {
              if (i == 0) {
                  sb.append(name);
                  i++;
              } else {
                  sb.append(", ");
                  sb.append(name);
              }
          }
          String printNames = sb.toString();
          Collection<Integer> points = newMap.values();
          StringBuilder sp = new StringBuilder("Total points: ");
          int sum = 0;
          for (Integer value : points) {
               sum += value;
               sp.append(value);
          }
          String printPoints = sp.toString();
          return printNames + " " + printPoints ;
   }
}
无故障输出

Rick Grimes
Rick Grimes rescued Carl 100pts!
Rick Grimes rescued Carl 100pts!Rick Grimes rescued Michone 50pts!
Characters rescued: Carl, Michone Total points: 10050
Rick Grimes
Rick Grimes rescued Carl 100pts!
Rick Grimes rescued Michone 50pts!
Characters rescued: Carl, Michone Total points: 150

澄清一下,这并不是特定于
HashMap
,而是任何java
Map
。要查找所有值的总和,下面的代码段将非常方便。请注意,
Map.class
具有
values()
方法,该方法返回包含映射的所有值的
Collection

Collection<Integer> values = myMap.values();
int sum = 0;
for (Integer value : values) {
    sum += value;
}

除此之外,您还可以使用
entrySet()
使用相同的循环来执行这两项操作。此方法返回一组
Map.Entry
,然后可以
getKey()
getValue()

看起来您希望在HashMap中同时显示键和值。你应该看看这个方法。您将能够在地图中进行迭代,并获得键和值(分数和字符)。

请尝试以下代码:

public static String view(Map newMap) {

     Set<Map.Entry<String,Integer>> entry=newMap.entrySet();
     StringBuilder sb1 = new StringBuilder("Characters rescued: ");
     int total=0;
     for(Entry<String,Integer> s:entry)
     {
         sb1.append(s.getKey() + ",");
         total=total+s.getValue();
     }

     sb1.deleteCharAt(sb1.toString().length()-1);

     return sb1.toString() + " " + total ;
}
公共静态字符串视图(Map newMap){
Set entry=newMap.entrySet();
StringBuilder sb1=新的StringBuilder(“已解救字符:”);
int-total=0;
对于(条目s:条目)
{
sb1.追加(s.getKey()+“,”);
总计=总计+s.getValue();
}
sb1.deleteCharAt(sb1.toString().length()-1);
返回sb1.toString()+“”+总计;
}

你查过
HashMap
keySet()
values()
方法了吗?很抱歉,我没有查过,我的答案会在那里吗?这些肯定会对你有帮助,可能还有一些循环构造,比如
for
循环。@Junikin-是的。。。你的答案肯定在那里:)谢谢,这是最有用的快速问题,在我的课堂上,已经存在一个toString()打印其他信息,将最后一行代码放在你的答案中会导致问题吗?好的。我输入了你建议的代码,但它没有把我的数字加在一起,而是按字面意思给了我
10050
,而不是
150
。我会发布我的代码,让你看看
public static String view(Map newMap) {

     Set<Map.Entry<String,Integer>> entry=newMap.entrySet();
     StringBuilder sb1 = new StringBuilder("Characters rescued: ");
     int total=0;
     for(Entry<String,Integer> s:entry)
     {
         sb1.append(s.getKey() + ",");
         total=total+s.getValue();
     }

     sb1.deleteCharAt(sb1.toString().length()-1);

     return sb1.toString() + " " + total ;
}