2016-10-18 2 views
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 вообще (это только моя пятая неделя в курсе), так что я не знаю, как не провести выходные до конца так, чтобы напечатать только один большой график, как:

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

Вы можете создать String под названием temp и объединить новую строку с этим и распечатать все в конце.

Например:

String temp = ""; 

Затем добавить все новые строки для этой строки Темп.

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)); 
Смежные вопросы