在我的输出中,它不断重复一行,然后在下一行中将它们压缩在一起。我想知道摆脱它
输出
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
答案 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所说的那样