文字列中のアルファベットの各文字がどれくらいの頻度で使用されているかを示すヒストグラムを出力する、toStringメソッドを作成しようとしています。最も頻繁に登場するキャラクターは60秒の長さでなければならず、残りのキャラクターはそれに合わせてスケーリングされます。が正しくないnum histgram
私の問題は、残りの文字をヒストグラムの正しい長さに合わせる式を作ることです。私の現在の方程式は(myArray [i]/max)* 60ですが、本当に奇妙な結果を得ています。
「hello world」を分析すると、Lが最も一般的な発生文字で、3回見られます。だから、ヒストグラムには60#、hは20、oは40などが必要です。代わりに、dのような結果が得られます:10 e:10 h:10 l:360 o:20 r:10 W:10、これはイムは、ちょうどあなたのコードを持つ多くの多くの問題があります
public class LetterCounter
private static int[] alphabetArray;
private static String input;
/**
* Constructor for objects of class LetterCounter
*/
public LetterCounter()
{
alphabetArray = new int[26];
}
public void countLetters(String input) {
this.input = input;
this.input.toLowerCase();
//String s= input;
//s.toLowerCase();
for (int i = 0; i < input.length(); i++) {
char ch= input.charAt(i);
if (ch >= 97 && ch <= 122){
alphabetArray[ch-'a']++;
}
}
}
public void getTotalCount() {
for (int i = 0; i < alphabetArray.length; i++) {
if(alphabetArray[i]>=0){
char ch = (char) (i+97);
System.out.println(ch +" : "+alphabetArray[i]);
}
}
}
public void reset() {
for (int i =0; i<alphabetArray.length; i++) {
if(alphabetArray[i]>=0){
alphabetArray[i]=0;
char ch = (char) (i+97);
System.out.println(ch +" : "+alphabetArray[i]);
}
}
}
public String toString() {
String s = "";
int max = alphabetArray[0];
int markCounter = 0;
for(int i =0; i<alphabetArray.length; i++) {
//finds the largest number of occurences for any letter in the string
if(alphabetArray[i] > max) {
max = alphabetArray[i];
}
}
for(int i =0; i<alphabetArray.length; i++) {
//trying to scale the rest of the characters down here
if(alphabetArray[i] > 0) {
markCounter = (alphabetArray[i]/max) * 60;
char ch = (char) (i+97);
System.out.println(ch +" : "+alphabetArray[i] + markCounter);
}
}
for (int i = 0; i < alphabetArray.length; i++) {
//prints the whole alphabet, total number of occurences for all chars
if(alphabetArray[i]>=0){
char ch = (char) (i+97);
System.out.println(ch +" : "+alphabetArray[i]);
}
}
return s;
}
}