java语言程序设计第7章程序清单7-4
package Program7;
import Program6.Program6_10GetCharacter;
public class Program7_4 {
public static void main(String[] args) {
char[] chars = createArray();
System.out.println("The lowercase letters are: ");
displayArray(chars);
int[] counts = countLetters(chars);
System.out.println();
System.out.println("The occurrences of each letters are: ");
displayCounts(counts);
}
public static char[] createArray() {
char[] chars = new char[100];
for (int i = 0; i < chars.length; i++)
chars[i] = Program6_10GetCharacter.getRandomLowerCaseLetter();
return chars;
}
public static void displayArray(char[] chars) {
for (int i = 0; i < chars.length; i++) {
if((i + 1) % 20 == 0)
System.out.println(chars[i]);
else
System.out.print(chars[i] + " ");
}
}
public static int[] countLetters(char[] chars) {
int[] counts= new int[26];
for (int i = 0; i < chars.length; i++) {
counts[chars[i] - 'a']++;
}
return counts;
}
public static void displayCounts(int[] counts) {
for (int i = 0; i < counts.length; i++) {
if((i + 1) % 10 == 0)
System.out.println(counts[i] + " " + (char)(i + 'a'));
else
System.out.print(counts[i] + " " + (char)(i + 'a') + " ");
}
}
}
在 public static int[] countLetters(char[] chars) 方法里,用for (int i = 0; i < chars.length; i++) {counts[chars[i] - 'a']++;}可以实现对字符的计数,没能理解。哪位大神能说明一下么。书上解释没看懂。
int[] counts= new int[26];counts这个数组有26个元素,的0下标存储的是a的个数,1下标存储b的个数,2下标存储c的个数……
chars[i] - 'a',把这个字符转换成对应的下标,比如chars[i]是'a',那么'a'-'a'=0,如果chars[i]是'b',那么'b'-'a'=1,等等。
所以让对应下标++实现了对这个字母的计数。
=_=aa
这句话把我绕蒙圈了,看了一遍代码才闹明白
这个代码的作用是:
计算a,b,c这些字母分别出现过的次数。
=_=aa
这句话把我绕蒙圈了,看了一遍代码才闹明白
这个代码的作用是:
计算a,b,c这些字母分别出现过的次数。
你的需求是统计26个小写字母每个字母出现的次数,使用的是数组,那么就可以用每个字母对应一个数组元素,下标就是26个字母对应的0-25。
从0开始,那么下标计算方法就是每个字母相对第一个字母a的偏移。letterIndex = letter-'a'就得到下标了。例如a的下标就是0(第一个元素),c就是第三个元素……。
你要统计每个字母出现的次数吗?