2016-10-18 11 views
1

私がしようとしているのは、基本的に入力に基づいてカナダの州の人口のパイプチャートを表示するプログラムを作ることです。入力の最後にすべての出力を印刷する方法

現在、私が書いたプログラムは、結果を印刷する前に1つの州とその人口をとり、その後のすべての州/地域で同じことをします。

情報を印刷するときに、個々にではなく最後にチャートを印刷したいと思っています。

私は全体の章を見直しました。私はStackexchangeサイトについても調べました。私はこれについて何も見つけることができませんが。それは不可能ですか?ここ

は私のコードです:

import java.util.Scanner; 

public class printPopChart { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Please enter the number of provinces"); 
     int pNum = in.nextInt(); 
     for (int i = pNum; i > 0; i--){ 
      System.out.println("Province: "); 
      String province = in.next(); 
      System.out.println("Population: "); 
      double pPop = in.nextDouble(); 
      double pipes = numberOfPipes(pPop); 
      printBar(province, pipes); 
     } 
    } 
    public static double numberOfPipes(double pop) { 
     return Math.ceil(pop/250000); 
    } 

    public static void printBar(String province, double pop) { 
     System.out.println("Province/Territory    Population "); // 32 between Start and word Population 
     System.out.print(province); 
     spaceBetween(province); 
     for (int i = 0; i <= pop; i++) { 
      System.out.print("|"); 
     } 
     System.out.println(); 
    } 

    public static void spaceBetween(String province) 
    { 
     for (int i = 1; i <= (32 - province.length()); i++) { 
      System.out.print(" "); 
     } 
    } 
} 

私は一般的な方法およびJavaへの比較的新しいです(これはコースで唯一の私の5週目である)ので、私は最後まで出力を保持するかどうかはわかりません

ここ
Province/Territory  Population 
Alberta     ||||||||||||||||| 
British Columbia  ||||||||||||||||||| 
Manitoba    |||||| 

は、もし興味があるなら、私は答えのいずれかを使用した後にやったことです::のようにようにただ一つの大きなチャートを印刷し

import java.util.Scanner; 

public class printPopChart { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     String temp = ""; 
     System.out.println("Please enter the number of provinces"); 
     int pNum = in.nextInt(); 
     for (int i = pNum; i > 0; i--){ 
      System.out.println("Province: "); 
      String province = in.next(); 
      System.out.println("Population: "); 
      double pPop = in.nextDouble(); 
      double pipes = numberOfPipes(pPop); 
      temp += printBar(province, pipes); 
     } 
     System.out.println("Province/Territory    Population "); // 32 between Start and word Population 
     System.out.print(temp); 
    } 
    public static double numberOfPipes(double pop) { 
     return Math.ceil(pop/250000); 
    } 

    public static String printBar(String province, double pop) { 
     String printB = ""; 
     printB += province; 
     printB += spaceBetween(province); 
     spaceBetween(province); 
     for (int i = 1; i <= pop; i++) { 
      printB += ("|"); 
     } 
     return printB + "\n"; 
    } 

    public static String spaceBetween(String province) 
    { 
     String spaceB = ""; 
     for (int i = 1; i <= (32 - province.length()); i++) { 
      spaceB +=" "; 
     } 
     return spaceB; 
    } 
} 

答えて

1

tempという名前のStringを作成し、新しいStringを連結して最後にすべてを印刷することができます。例えば

String temp = ""; 

そして、この一時Stringにすべての新しい文字列を追加します。

temp + = "Province/Territory"; 
temp += "\t Population \n" 

\ tはタブの特殊文字で、\ nは改行の特殊文字です。あなたがそれをやり続けるならば、あなたはただ一つの文字列を取得し、あなたはすべてが完了した後にその文字列を印刷することができます。

ディスプレイを適切にフォーマットするのに役立つprintfについて知ることもできます。あなたはここでそれについての詳細を学ぶことができます:How to use formatting with printf correctly in Java

+0

あなたがこれを行けば代わりに 'StringBuilder'を使うことをお勧めします。 – Dayan

+0

フォーマットのために非常に多くのSystem.out.printlnとSystem.out.printがあります。これ以外の方法はありませんか? – asdfghjklm

+0

他にもたくさんの方法がありますが、本当に連結したい場合は 'StringBuilder'を使用して文字列を間違えないようにしてください。 – Rogue

0

私は出力のList<String>を続けるだろう:

List<String> out = new LinkedList<>(); 

//elsewheres, add a message to be printed 
out.add("Error 42: Missing Cowbell"); 

//afterwards, print all the added strings 
out.forEach(System.out::println); 

//optionally, clear the list after printing 
out.clear(); 

あなたは、出力をフォーマットする必要がある場合は、String#formatがある:

out.add(String.format("Two-place decimal: %.2f", 3.14159F)); 
関連する問題