我有一个程序,它接受一个字符串并给出一个直方图。问题是我需要直方图有序......就像...... 字母数 一个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)方法,它搞砸了整个程序...
答案 0 :(得分:1)
创建一个长度为26的int数组,包含每个字母的出现次数(最初为0)。
循环输入的每个字符,并在适当的索引处递增整数(0表示a,1表示b,等等)。
然后打印int数组的每个元素。
哦,尊重Java命名方案:变量以小写字母开头。
答案 1 :(得分:1)
使用单个循环遍历字符串&amp;计算字母/字符的出现次数,而不是不必要的&amp;循环中的低效循环&#34;你目前的结构。
初始化,计数和&amp;打印输出应该是单独的代码块 - 不会损坏到同一个块中。