输出重复一行

时间:2014-12-19 09:33:39

标签: java hashmap output

在我的输出中,它不断重复一行,然后在下一行中将它们压缩在一起。我想知道摆脱它

输出

Rick Grimes
Rick Grimes rescued Carl 100pts!

Rick Grimes rescued Michone 50pts!
Rick Grimes rescued Michone 50pts!

Characters rescued: Carl, Michone Total points: 150

如您所见,line 3在前一次救援前添加了先前的救援

渴望输出

Rick Grimes
Rick Grimes rescued Carl 100pts!

Rick Grimes rescued Michone 50pts!

Characters rescued: Carl, Michone Total points: 150

这是我的代码

GameDriver.java

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

public class GameDriver {

  public static void main(String[] args) throws FileNotFoundException {

         Hero N = new Cop();
         String s;
         File f = new File (args[0]);
         Scanner input = new Scanner(f);
         while (input.hasNext()) {
                s = input.next();
                if (s.equalsIgnoreCase("h")) {
                                        System.out.println(N.getHeroName());
                                       }

                if (s.startsWith("r")) {
                                        String p = input.next();
                                        String a = input.next();
                                        String cn = input.next();
                                        int pts = input.nextInt();
                                        N.newMap.put(cn, pts);
                                        System.out.println(N.rescue(cn));

                                       }

                if (s.startsWith("v")) {
                                        System.out.println(N.view());
                                       }
         }

  }
}

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(String key) { //class to rescue people or things
          String out = "";
          for(String _key : newMap.keySet()) {
              out += heroname1 + " rescued " + key + " " + newMap.get(key) + "pts!" + "\n";
          }
          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(sum);
          String printPoints = sp.toString();
          return printNames + " " + printPoints ;
   }
}

我做错了什么?请询问任何澄清!的谢谢!

这里编辑的是我的.txt文件

c h Rick Grimes
r Rick Grimes Carl 100
r Rick Grimes Michonne 50
v Rick Grimes

2 个答案:

答案 0 :(得分:3)

您要将第一个输出与下一个输出相邻:

out += heroname1 + " rescued " + _key + " " + newMap.get(_key);

你应该返回字符串数组,或者你应该添加一个新行:

out += heroname1 + " rescued " + _key + " " + newMap.get(_key) + "\n";

答案 1 :(得分:1)

将您的println放入视图中。

  if (s.startsWith("r")) {
            String p = input.next();
            String a = input.next();
            String cn = input.next();
            int pts = input.nextInt();
            N.newMap.put(cn, pts);
            System.out.println(N.rescue());

                       }

if (s.startsWith("v")) {
                        System.out.println(N.view());
                       }

将其更改为。

 if (s.startsWith("r")) {
    String p = input.next();
    String a = input.next();
    String cn = input.next();
    int pts = input.nextInt();
    N.newMap.put(cn, pts);


   }

   if (s.startsWith("v")) {
    System.out.println(N.rescue());
    System.out.println(N.view());
   }

因为你要迭代所有的值。

 public String rescue() { 
          String out = "";
          for(String _key : newMap.keySet()) {
              out += heroname1 + " rescued " + _key + " " + newMap.get(_key) + "!\n"
          }
          return out;
   }

修改 如果要在&#39; r&#39;

上打印,请删除循环
 public String rescue(String key) {
          String out = "";
          out = heroname1 + " rescued " + key + " " + newMap.get(key) + "pts!" + "\n";
          return out;
   }

也用于添加&#34; \ n&#34;像@almas shaikh所说的那样