-1
public static void main(String args[])
{

    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    scan.nextLine();
    String[] label = new String[n];
    int[] data = new int[n];


    for(int i=0; i<n*2; i++)
    {
        if (i<n)
        {
            label[i] = scan.nextLine();
        }
        if (i >= n)
        {
            data[i-n] = scan.nextInt();
        }
    }   

    for(int i=0; i<n; i++)
    {
        String a = "";
        for(int j=0; j<data[i]; j++)
        {
            a = a + "*";
            if(j==(data[i]-1)) System.out.println();
        }
        System.out.printf("%15s  %-7s", label[i], a);
    }
}

输入

5
Sidney
Washington DC
London
New York
The New City of a Lot of Letters
4
8
10
3
12

我不知道如何根据输入中的字母数量调整格式。如果我执行此代码,The New City of a Lot of Letters 会打乱格式。如何在格式化打印中使用变量值?

这就是我想要的,除了最后一行是如何打印的。代码应将其打印到左侧。

在此处输入图像描述

4

3 回答 3

1
System.out.printf("%15s  %-7s", label[i], a);

它不起作用的原因是从左边缩进15并且The New City of a Lot of Letters的长度是32
更改%15s%32s,它应该可以解决您的问题。
编辑:
要根据输入更改缩进,请添加以下内容:

int length = 0;
for (int i = 0; i < label.length(); i++) {
    if (label[i].length() > length) {
        length = label[i].length();
    }
}

// do your stuff

System.out.printf("%" + length + "s  %-7s", label[i], a);
于 2013-10-15T20:54:02.740 回答
0

目前尚不清楚问题是什么;长度/填充说明符有助于对齐输出,但您需要考虑所有可能的输入。这意味着迭代数据,找到最大长度,并构造一个格式字符串,以某种方式(例如,maxStringLength+5)使用该最大长度变量来定义该特定列的宽度。

使用几个 Java ASCII 表库中的任何一个可能会更容易,例如,

于 2013-10-15T20:26:31.660 回答
0

从我在屏幕截图中看到的,您只需要动态计算左子字符串的宽度,如下所示:

private static void printLine(String strLeft, String strRight, int minLeftWidth){
    int width = strLeft.length() <= minLeftWidth ? minLeftWidth : strLeft.length();
    System.out.println(String.format("%"+width+"s   %-7s", strLeft, strRight));
}

那么,如果你调用这样的方法:

printLine("London", "*****", 15);
    printLine("Oslo", "************", 15);
    printLine("Paris", "**", 15);
    printLine("Some Really Freakishly Complex City Name", "**********", 15);

您应该得到所需的输出。当左字符串变得很长时,我还会考虑包装城市名称以涵盖这些情况。

希望这可以帮助。干杯

于 2013-10-15T20:57:53.120 回答