2 qq 34018371 qq_34018371 于 2016.02.27 01:57 提问

关于java se 的小问题

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']++;}可以实现对字符的计数,没能理解。哪位大神能说明一下么。书上解释没看懂。

5个回答

caozhy
caozhy   Ds   Rxr 2016.02.27 06:54
已采纳

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,等等。
所以让对应下标++实现了对这个字母的计数。

qq_34018371
qq_34018371 回复caozhy: 昨天看书看到大半夜,脑袋懵b了![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif)里的count[char[i]- 'a']++;每个char[i]- 'a'都对应着0到26的数字。对应着a到z的情况,对吧?
2 年多之前 回复
qq_26946497
qq_26946497   2016.02.27 09:42

=_=aa
这句话把我绕蒙圈了,看了一遍代码才闹明白
这个代码的作用是:
计算a,b,c这些字母分别出现过的次数。

qq_26946497
qq_26946497   2016.02.27 09:42

=_=aa
这句话把我绕蒙圈了,看了一遍代码才闹明白
这个代码的作用是:
计算a,b,c这些字母分别出现过的次数。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.27 11:19

你的需求是统计26个小写字母每个字母出现的次数,使用的是数组,那么就可以用每个字母对应一个数组元素,下标就是26个字母对应的0-25。
从0开始,那么下标计算方法就是每个字母相对第一个字母a的偏移。letterIndex = letter-'a'就得到下标了。例如a的下标就是0(第一个元素),c就是第三个元素……。

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.02.27 16:43

你要统计每个字母出现的次数吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于泛型和重载的小问题
 首先描述问题,看代码。代码例子:view plaincopy to clipboardprint?import java.util.ArrayList;   public class Test {       public static String test(ArrayList list){           return "";       }       public static Integer test(ArrayList list){           return 1;       } 
数组的两个小问题
1.不可以对数组名(指针常量)进行赋值操作2.对数组进行整体赋值只能在最初声明的时候进行。
数组操作的两个常见小问题
/* 数组操作的两个常见小问题: ArrayIndexOutOfBoundsException:数组索引越界异常 原因:你访问了不存在的索引。 NullPointerException:空指针异常 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。 作用:请自己把所有的场景Exception结尾的问题总结一下。以后遇到就记录下来。  现象,原因,解决方案。 */
Java SE面试题(二)
11.  HashMap和ConcurrentHashMap的区别,HashMap的底层源码 从类图中可以看出来在存储结构中ConcurrentHashMap比HashMap多出了一个类Segment,而Segment是一个可重入锁。  ConcurrentHashMap是使用了锁分段技术技术来保证线程安全的。  锁分段技术:首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当
写给大忙人的JavaSE 8 中文版 + 英文版
写给大忙人的JavaSE8 中文版 + 英文版 pdf格式的,免积分下载
Java SE考试--编程题总结
Java SE考试--编程题总结
【Java SE】————JDK、JRE、JVM简介
JDK、JRE、JVM简介:  JVM(Java Virtual Machine,Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计   算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包括Java虚拟机(JVM Java Virtua
java SE 学习教程(面向对象高级程序设计)
java SE 学习教程(面向对象高级程序设计) 里面包含13个关于java se学习的word文档
java se基础书籍
关于java se的基础书籍,含think-in-java,与写给大忙人看的Java SE 8
java中的数组的常见操作问题
数组操作常见操作     对数组操作最基本的动作就是存和取。     核心思想:就是对角标的操作。     示例:遍历并打印数组元素 class ArrayDemo{ public static void main(String[] args) { int[] arr = {89,34,270,17}; for