java - 如何在同一行打印数组和直方图?

标签 java arrays histogram

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();     


 }
 }

显然我的帖子有太多代码,而且我真的没有更多信息可以提供,所以它希望我随机输入一些内容。 公开课 排 { 私有(private)字符串行;

  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;
  }

  }

最佳答案

这是您问题的解决方案。问题在于您首先打印所有 Row 数据,然后打印所有 Integer 数据。您需要同时打印它们。不是一个接一个。另外仅供引用,大约有一百万种不同的方法可以使您的初始代码变得更好。我会试着坐下来想一个更好的方法来做到这一点,这样你就可以学习(在你交作业之后,这样你就不会着急,我们都可以提供帮助。不过,这是一个好的开始。)

首先,我删除了 Row 数据的打印,并向您的 Counter 类添加了一个构造函数以获取 Row 数据。

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")
};  
Counter section = new Counter(numbers);
section.StarCounter();

新构造函数:

public class Counter
{
    Row[] numbers;
    public Counter(Row[] numbers) {
        this.numbers = numbers;
    }
    //Rest of your methods
}

然后在打印 Integer 数据时打印 Row 数据。

System.out.print(numbers[0]);  //new line
for(int star = 0; star <= counted1  ; star++)
{
    System.out.print("*");
}
System.out.println();
System.out.print(numbers[1]);  //new line
for(int star = 0; star <= counted2 ; star++)
{
    System.out.print("*");
}
//Do the same for the rest

希望这有帮助!

哦,还去掉了 Row 类中的换行符。

public String toString()
{
    return rows + "|";
}

关于java - 如何在同一行打印数组和直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877655/

相关文章:

java - 从排序数组中交换了哪些数字

javascript - 推送到数组不会触发 vue 的 react

r - 使用 R 在直方图中使 y 轴对数

java - Android正则表达式替换bug

java - 中缀到后缀表达式中的结合性规则

java - 从文件中读取。哪种方法更好?为什么?

php - 将逗号分隔的字符串拆分为数组?

python - 使用 cv2.equalizeHist 时出错

Python Altair 如何在不更改轴刻度的情况下对直方图数据进行分箱

java - 以编程方式设置 PercentageRelativeLayout 中的宽高比