У меня все работает, за исключением того, что я не могу понять, почему мой код не находит наименее распространенную букву. У меня есть цикл for, который должен находить наименее распространенную букву, но он мне ничего не дает. он дает мне наиболее распространенные, но не менее важные.
FileReader file = new FileReader("\\src\\alphaCounter\\");
BufferedReader reader = new BufferedReader(file);
HashMap<Character,Integer> myHashSet = new HashMap<Character, Integer>();
myHashSet.put('a', 0);
/** this goes to Z
int mostCommon = 0;
char mostCommonLtr = ' ';
int leastCommont = 0;
char leastCommonLtr = ' ';
Object[] words = reader.lines().toArray();
/**
* this loop has changed all the letters to lower case
*/
for(Object word : words){
String wordString = word.toString();
wordString = wordString.toLowerCase();
/**
*
*/
if (wordString.length() > bigWord.length()){
bigWord = wordString;
}
for(int alpha = 0; alpha < wordString.length(); alpha++){
myHashSet.put(wordString.charAt(alpha), myHashSet.get(wordString.charAt(alpha)) + 1);
}
}
for(int alpha = 'a'; alpha<= 'z'; alpha++){
System.out.println("The number of " + (char)alpha + "'s in the words.txt = " + myHashSet.get((char)alpha ));
if (myHashSet.get((char)alpha) > mostCommon) {
mostCommonLtr = (char)alpha;
mostCommon = myHashSet.get((char)alpha);
/**
* this gave me the most common letter
*/
if (myHashSet.get((char)alpha) < leastCommont) {
leastCommonLtr = (char)alpha;
leastCommont = myHashSet.get((char)alpha);
/**
* this was supposed to give me the least common
*/
}
}
System.out.println("The letter that appeared the least is " + leastCommonLtr);
System.out.println("The letter that appears the most is " + mostCommonLtr);
Опубликуйте образец ввода и ожидаемый фактический результат
мой код печатает это сообщение "Буква, которая появлялась меньше всего", по крайней мере, должна сказать мне j на основе моего файла




Заменять
int leastCommont = 0;
С участием
int leastCommont = Integer.MAX_VALUE;
Причина
Если leastCommont инициализирован значением 0, следующее условие вашего кода никогда не выполняется:
if (myHashSet.get((char)alpha) < leastCommont)
@ Lock13B Если вы получили ответ на свой вопрос, не забудьте отметить вопрос как полученный, приняв ответ на него.
if (myHashSet.get((char)alpha) != null && myHashSet.get((char)alpha) > mostCommon) {
mostCommonLtr = (char)alpha;
mostCommon = myHashSet.get((char)alpha);
/**
* this gave me the most common letter
*/
}
if (myHashSet.get((char)alpha) != null && myHashSet.get((char)alpha) > leastCommont && alpha != mostCommonLtr ) {
leastCommonLtr = (char)alpha;
leastCommont = myHashSet.get((char)alpha);
/**
* this was supposed to give me the least common
*/
}
Попробуйте использовать приведенный выше фрагмент кода. У вас есть самое высокое и самое низкое в одном предложении if. нужно обращаться с этим по-другому. Судя по предыдущему коду, дело даже не доходило до наименее используемого символа.
Надеюсь, этот код вам поможет. Я сделал простой счетчик символов. Вы можете сделать функцию такой, какой хотите, используя это. Если вы хотите, чтобы регистр был безразличным, сделайте входную строку строчными или прописными.
String wordString = "a1s3df2ad2fsa3dfwe3wrqasdf";
System.out.println("input string = "+wordString) ;
char[] cword = wordString.toCharArray();
List<Character> mylist = new ArrayList<Character>();
Set<Character> charset = new HashSet<Character>();
HashMap<Character, Integer> myHashSet = new HashMap<Character, Integer>();
int maxcnt, mincnt;
for (char c : cword) {
mylist.add(c);
charset.add(c);
}
for (Character c : charset) {
int freq= Collections.frequency(mylist, c) ;
System.out.println("alpha " + c + " freq = "+freq );
myHashSet.put(c, freq) ;
}
maxcnt = Collections.max(myHashSet.values()) ;
mincnt = Collections.min(myHashSet.values()) ;
System.out.println("maxcnt = "+maxcnt+" mincnt = "+mincnt) ;
// get max alpha
System.out.print("max count alphas: ") ;
for (Character c : charset ) {
if ( maxcnt == myHashSet.get(c).intValue() ) {
System.out.print(" "+c);
}
}
System.out.println("") ;
// get min alpha
System.out.print("min count alphas: ") ;
for (Character c : charset ) {
if ( mincnt == myHashSet.get(c).intValue() ) {
System.out.print(" "+c);
}
}
System.out.println("") ;
вывод образца
input string=a1s3df2ad2fsa3dfwe3wrqasdf
alpha a freq=4
alpha 1 freq=1
alpha q freq=1
alpha 2 freq=2
alpha r freq=1
alpha s freq=3
alpha 3 freq=3
alpha d freq=4
alpha e freq=1
alpha f freq=4
alpha w freq=2
maxcnt=4 mincnt=1
max count alphas: a d f
min count alphas: 1 q r e
Как вы инициализируете
leastCommont?