Java - 直方图程序

时间:2013-11-02 23:25:43

标签: java

我有一个程序,它接受一个字符串并给出一个直方图。问题是我需要直方图有序......就像......   字母数     一个0     b 1     c 0 ....等我的程序将只返回字符串中的字母,它不会显示不在字符串中的字母。这是我的主要计划。

 import java.util.*;
 public class CharacterHistogram {
    //scanner and method decleration
    Scanner keyboard = new Scanner (System.in);
    public static void generateHistogram( String input) {
        // make input lower case
        input=input.toLowerCase();
        int lengthOfInput= input.length();
        char[] Array = input.toCharArray();
        //Arrays.sort(Array);

        int count = 0;
        // colum creation
        System.out.println();
        System.out.println("         Character        Count");
        for (int i = 0; i < lengthOfInput; i++) {
            // reset count every new letter
            count = 1;

            for (int x = i + 1; x < lengthOfInput; x++) {
                if (Array[i] == ' ') {
                    break;
                }

                if (Array[i] == Array[x]) {
                    count++;
                    Array[x] = ' ';
                }
            }
             // check for empty char
            if (Array[i] != ' ') {
                System.out.println();
                //row creation
                System.out.println("             "+Array[i]+"              "+count);
                System.out.println();
            }
        }
    }
 }

这是测试人员:

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

    String input = "4axaaafgaa5";

    System.out.println("Generate Histogram for: " + input);
    CharacterHistogram.generateHistogram(input);

    input = "   OSU won 34-10 and now have 7 wins";

    System.out.println("Generate Histogram for: " + input);
    CharacterHistogram.generateHistogram(input);
  }
}

我想知道是否有任何方式按字母顺序显示所有字母(即使字母中未使用的字母)。谢谢。

P.S。我已经尝试了sort(Array)方法,它搞砸了整个程序...

2 个答案:

答案 0 :(得分:1)

创建一个长度为26的int数组,包含每个字母的出现次数(最初为0)。

循环输入的每个字符,并在适当的索引处递增整数(0表示a,1表示b,等等)。

然后打印int数组的每个元素。

哦,尊重Java命名方案:变量以小写字母开头。

答案 1 :(得分:1)

使用单个循环遍历字符串&amp;计算字母/字符的出现次数,而不是不必要的&amp;循环中的低效循环&#34;你目前的结构。

初始化,计数和&amp;打印输出应该是单独的代码块 - 不会损坏到同一个块中。