0

我有一个程序,它接受一个字符串并给出一个直方图。问题是我需要直方图按顺序排列......比如......字母计数a 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);
  }
}

我想知道是否有任何方法可以按字母顺序显示所有字母(即使是未在字符串中使用的字母)。谢谢你。

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

4

2 回答 2

1

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

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

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

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

于 2013-11-02T23:30:26.820 回答
1

使用单个循环遍历字符串和计数字母/字符的出现次数,而不是您当前拥有的不必要且低效的“循环内循环”结构。

初始化、计数和打印输出应该是单独的代码块——而不是被整合到同一个块中。

于 2013-11-02T23:36:34.073 回答