我有一个程序从文本文件中获取输入并显示此
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
int numLabels = 0;
if(scan.hasNextInt())
{
numLabels = scan.nextInt();
scan.nextLine();
}
else
{
System.out.println("Error! Invalid input.");
System.exit(0);
}
String[] label = new String[numLabels];
int[] data = new int[numLabels];
for(int i=0; i<numLabels*2; i++)
{
if (i<numLabels)
{
label[i] = scan.nextLine();
}
if (i >= numLabels)
{
if(scan.hasNextInt())
{
data[i-numLabels] = scan.nextInt();
}
else
{
System.out.print("Error! Invalid input.");
System.exit(0);
}
}
}
for(int i=0; i<numLabels; i++)
{
int width = 0;
for(int j=0; j<label.length; j++)
{
if(width<label[j].length()) width=label[j].length();
}
String a = "";
for(int j=0; j<data[i]; j++)
{
a = a + "*";
if(j==(data[i]-1)) System.out.println();
}
System.out.printf("%" + width + "s %s", label[i], a);
}
}
它正在做我想要的,但开头有一个空白行。它非常小,但我想知道为什么它会出现,现在都要修复它以及将来参考。
答案 0 :(得分:2)
这是因为这一行:
if(j==(data[i]-1)) System.out.println();
另外,通过将新行放在循环中,我认为当你尝试绘制计数为0的东西时,它实际上会产生错误的结果。
如果您想摆脱它,请在条形图的每一行后打印换行符:
String a = "";
for(int j=0; j<data[i]; j++)
{
a = a + "*";
}
System.out.printf("%" + width + "s %s\n", label[i], a);