一.问题描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
二.问题分析
首先我们要解决以下几点问题
1. 要找出出现最多单词中的字母
2.找出出现最多字母的次数
3.如果不同字母出现的次数相同,要按照ASCLL码表中的顺序打印出来
三.问题解决
代码如下:
package LuoGu;
import java.util.Scanner;
public class Text4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str=sc.next();//用Scanner键盘录入读入一个单词
int i;
char ch = 'a';//初始化一下ch的值
int arr[] = new int[26];// 定义一个整形数组
for (i = 0; i < str.length(); i++) {
arr[str.charAt(i) - 'a']++;
}/*首先说明一下。charAt(i)函数是为了读取字符串中的对应字符,比如说“haxihanshu”。
那么charAt(0)就对应的是第一个字母'h'*/
/*'a'对应的ASCLL码表中是97,java中有数据类型转换,所以第一个for循环
* 就意味着遍历了str这个字符串中的所有字符,这就是str.charAt(i)中的含义,
* 再减去a对应的ASCLL码,这样就对应着所有字母正好对应着arr数组的数组下标
* 外围arr[]++意思也就是如果出现相同字母的话那么定义的这个空数组(默认全为0)
* 里面的数值也就从零开始加次数,意味着arr这个数组里面的数代表了字母出现的次数
*/
//下面开始找arr数组中最大的数字。也就是字母出现最多的次数以及所对应的字母
int max = 0;
for (int j = 0; j < 26; j++) {//遍历arr数组,找出数组中的最大值
if (max < arr[j]) {
max = arr[j];
ch=(char)(j+97);//强制类型转化,此时的j的值就是上面减去'a'之后的数
}
}
System.out.println(ch);
System.out.println(max);
}
}
注意ch要赋初始值,第二个for循环中的if()括号里面不能加等号