在Java中创建直方图

时间:2015-07-19 00:53:23

标签: java arrays loops

我用以下代码创建了一个直方图:

import java.util.*; 

public class Murray_A03Q3 {
    public static void main (String [] args){

        int num = 1;
        int[] nums = new int[10];  

        List<Integer> list = new ArrayList<Integer>();

        Scanner scan = new Scanner(System.in);


        while(num != 0){
           System.out.print("Enter a value to plot: ");
           num = scan.nextInt();
           System.out.println();
           if(num != 0)
              list.add(num);
        }


        for (int a = 0; a < list.size(); a++){
            nums[(list.get(a)-1) / 10]++;
        }

        for (int count = 0; count < 10; count++){
           System.out.print((count*1+1) + (count == 1 ? " ": " ") + "| \t");

           for(int h = 0; h < nums[count]; h++)
              System.out.print("#");

           System.out.println();
        }

    } // end of main

} // end of class Murray

输出为:

1 |     ######
2 |     
3 |     
4 |     
5 |     
6 |     #
7 |     
8 |     
9 |     #
10 | 

但是我需要它来打印来自用户输入的值1-10而不是1-100,就好像是打印一样(上面的输出使用了十个以外的两个值,这就是为什么一个打印在6&amp; 9 )。我已经扫描了代码并尝试以不同的方式操纵它以实际获得我想要的东西,但我无法弄明白。我的问题是,实际需要改变什么来获得1-10之间的值?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你应该限制它,这样他们只能输入1-10。在你的nums数组中,我只存储了该索引号的出现次数。然后在打印时,只需打印索引+ 1,内部循环就会为您执行#。

import java.util.*;

public class Murray_A03Q3{
   public static void main (String [] args){

      int num = 1;
      int[] nums = new int[10];  

      List<Integer> list = new ArrayList<Integer>();

      Scanner scan = new Scanner(System.in);

      while(num != 0){
         System.out.print("Enter a value to plot: ");
         num = scan.nextInt();
         System.out.println();
         if(num > 0 && num <= 10)
            list.add(num);
         if(num > 10 || num < 0)
                System.out.println("Please enter a number 1-10");
      }

      for (int a = 0; a < list.size(); a++){
         nums[a] = Collections.frequency(list, a);
      }

      for (int count = 0; count < 10; count++){
         System.out.print((count+1) + "\t|");

         for(int h = 0; h < nums[count]; h++)
            System.out.print("#");

         System.out.println();
      }
   } // end of main
} // end of class Murray

我还在标签前移动了线条,使其看起来更均匀。这是1,2,3的输入。它用于显示1行的所有3#。

1   |#
2   |#
3   |#
4   |#
5   |
6   |
7   |
8   |
9   |
10  |

答案 1 :(得分:0)

如果您要排除10以外的内容,那么当您添加到nums时,您的循环错误。更改

for (int a = 0; a < list.size(); a++){
    nums[(list.get(a)-1) / 10]++;
}

for (int a = 0; a < list.size(); a++) {
    if (list.get(a)-1 < 10) {
        nums[list.get(a)]++;
    }
}