【问题标题】:How can I print an array and a method from another class如何打印另一个类的数组和方法
【发布时间】:2016-02-23 18:01:24
【问题描述】:
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();     


 }
 }

显然我的帖子有很多代码,我真的没有更多信息可以提供,所以它希望我随机输入一些内容。 公共类行 { 私有字符串行;

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

}

【问题讨论】:

  • 发帖时出了点问题我的意思是打印出来
  • 你的Counter在哪里?
  • 它的类从 .txt 文件中读取值并将数据组织成星形行,如使用 for() 循环所示,是否无法在我的 main(String[] args )?

标签: java arrays histogram


【解决方案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 流进一步简化,但这可能比您目前所需要的信息更多。

【讨论】:

  • 好的,如何同时打印行和星?即使我将它们放在同一个循环中,它也不会并排打印它们,而是打印我的第一个数组值,然后打印我所有的星星行,然后打印我的第二个数组值,然后所有星星再次打印所有不同的行。
  • @JadenHambley 对我来说听起来像是一个错误。请注意,如果您使用System.out.print,则下一个打印将在同一行上。如果您使用println,下一个打印将在下一行。
  • bug 是什么意思?对不起,我对编程的无知。
  • 如果您知道如何将它们打印在同一行上,将不胜感激,或者如何避免此错误,这是明天到期的作业,谢谢您的帮助!
  • @JadenHambley 我需要查看代码才能找到错误。您可以将打印结果的代码添加到您的问题中吗?
【解决方案2】:

我没有看到 for 循环的任何左括号或右括号。 section.StarCounter 应该在同一个循环中。

试试这个:

for(Row number : numbers){
System.out.print(number);   
Counter section = new Counter();
section.StarCounter();
System.out.println();
}

注意 for 循环有大括号,循环以新行结束。

【讨论】:

  • 如果我将它们放在同一个循环中,它将打印我的第一个数组值,然后是我所有的星行,然后是我的第二个数组值,然后是我所有的星行,仍然都在单独的行上,我想做的就是让我的星星打印在我的数组值旁边。
  • 我仍然得到相同的结果,成行的星星出现在数组对象的下方。而不是让我的所有循环只打印一次,每次打印一个数组对象时打印一次。
猜你喜欢
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多