2014-12-19 6 views
0

В моем выходе он продолжает повторять строку, а затем сжимает ее вместе в следующей строке. Я хочу знать, чтобы избавиться от негоВывод, повторяющий строку

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 ; 
    } 
} 

Что я делаю неправильно? Просьба уточнить! СПАСИБО !!

EDIT вот мой .txt файл

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

ответ

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; 
    } 

EDIT Или удалить петлю, если вы хотите напечатать его на «г».

public String rescue(String key) { 
      String out = ""; 
      out = heroname1 + " rescued " + key + " " + newMap.get(key) + "pts!" + "\n"; 
      return out; 
    } 

Также используется надстройка "\ п", как то, что @almas шайх сказал

+0

Пока это работает, тестер (кто не я) будет использовать команду' r', а не команду 'v' и ожидать выход для спасения, 'v' должен показывать статус текущего игрока – Junikin

+0

отредактировать ответ – user23123412

+0

ах да ваше редактирование работает! большое спасибо! – Junikin

3

Вы прилагая выход первого с следующей в очереди здесь:

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

Вы должны либо вернуть массив строк или вы должны добавить новую строку примерно так:

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

не '\ n'' 'C++, хотя? – Junikin

+0

поэтому для java 'System.out.println()' вместо этого? – Junikin

+0

\ n работает на Java тоже :) – Kiki

Смежные вопросы