import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Histogram
{
public static void main(String[] args) throws FileNotFoundException
{
Row[] numbers = {
new Row("1 - 10"), new Row("11 - 20"), new Row("21 - 30")
new Row("31 - 40"), new Row("41 - 50"), new Row("51 - 60")
new Row("61 - 70"), new Row("71 - 80"), new Row("81 - 90"),
new Row("91 - 100")
};
for(Row number : numbers)
System.out.print(number);
Counter section = new Counter();
section.StarCounter();
}
打印出类似这样的内容:
1 - 10|
11 - 20|
21 - 30|
*****************
*********
***
ect.
我希望打印出类似的内容:
1 - 10|*****************
11 - 20|*********
21 - 30|***
ect.
提前感谢任何指针,我可能只是忽略了显而易见的事情。
专柜课:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Counter
{
public void StarCounter() throws FileNotFoundException
{
File file = new File("alotofnumbers.txt");
Scanner scan = new Scanner(file);
int[] integers = new int[1000];
int start = 0;
int count1 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
int count5 = 0;
int count6 = 0;
int count7 = 0;
int count8 = 0;
int count9 = 0;
int count10 = 0;
while (scan.hasNextInt())
{
integers[start++] = scan.nextInt();
}
for (int input : integers)
{
if(input <= 10)
{
count1++;
}
else if(input > 10 && input <= 20)
{
count2++;
}
else if(input > 20 && input <= 30)
{
count3++;
}
else if (input > 30 && input <= 40)
{
count4++;
}
else if (input > 40 && input <= 50)
{
count5++;
}
else if (input > 50 && input <= 60)
{
count6++;
}
else if (input > 60 && input <= 70)
{
count7++;
}
else if (input > 70 && input <= 80)
{
count8++;
}
else if (input > 80 && input <= 90)
{
count9++;
}
else if (input > 90 && input <= 100)
{
count10++;
}
}
double counted1 = count1 / 2.7;
double counted2 = count2 / 2.7;
double counted3 = count3 / 2.7;
double counted4 = count4 / 2.7;
double counted5 = count5 / 2.7;
double counted6 = count6 / 2.7;
double counted7 = count7 / 2.7;
double counted8 = count8 / 2.7;
double counted9 = count9 / 2.7;
double counted10 = count10 / 2.7;
for(int star = 0; star <= counted1 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted2 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted3 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted4 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted5 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted6 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted7 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted8 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted9 ; star++)
{
System.out.print("*");
}
System.out.println();
for(int star = 0; star <= counted10 ; star++)
{
System.out.print("*");
}
System.out.println();
}
}
显然我的帖子需要很多代码,而且我真的没有太多信息要提供,所以它要我随机输入一些内容。 公共类Row { 私有字符串行;
public Row(String colums)
{
rows = colums ;
}
public String toString()
{
Counter section = new Counter();
return rows + "|" + "\n";
}
public void setRow(String colums)
{
rows = colums;
}
public String getRow()
{
return rows;
}
}
答案 0 :(得分:1)
我不确定你的问题是什么,因为标题似乎与问题没有密切关系,所以我将假设它“是否有更好的方法来创建直方图?”。
您不能采用打印所有标题(行)然后打印星星的方法。它们必须同时完成。
因为Java中的整数除法自动向下舍入,所以您的所有计数代码都可以显着减少:
int[] counts = new int[GROUPS];
for (int i: inputs)
counts[Math.min(GROUPS - 1, (i + 1) / 10)]++;
GROUPS
需要定义为静态类常量。
然后打印计数可以简化为:
for (int i = 0; i < GROUPS; i++) {
System.out.print(String.format("%2d - %2d]", i * 10 + 1, i * 10 + 10));
for (int s = 0; s < counts[i]; s++)
System.out.print("*");
System.out.println();
}
事实上,使用Java 8流可以进一步简化这一点,但这可能比您目前获得的信息更多。
答案 1 :(得分:1)
我没有看到for循环的任何打开或关闭括号。 section.StarCounter应该在同一个循环中。
试试这个:
for(Row number : numbers){
System.out.print(number);
Counter section = new Counter();
section.StarCounter();
System.out.println();
}
注意for循环有大括号,循环以新行结束。