有一个方法在输入结束时打印所有输出

时间:2016-10-18 21:36:39

标签: java

我要做的是基本上制作一个程序,根据输入显示加拿大各省的人口管道图。

现在,我编写的程序在打印结果之前只需要一个省和它的人口,然后对每个后续的省/地区都这样做。

我想让它获取数据,然后在结束时打印整个图表,而不是单独打印信息。

我已经回顾了整章,我还查看了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;
    }
}

2 个答案:

答案 0 :(得分:1)

您可以创建一个名为temp的String,并将新的String连接到该String并在末尾打印所有内容。

例如:

String temp = "";

然后将所有新的字符串添加到此临时字符串。

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

\ t是制表符的特殊字符,\ n是新行的特殊字符。如果你继续这样做,你将得到一个字符串,你可以在完成所有事情后打印该字符串。

您还可以了解printf,它可以帮助您正确格式化显示。您可以在此处详细了解:How to use formatting with printf correctly in Java

答案 1 :(得分: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));