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

0

5个回答

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

1
qq_34018371
Yeper93 回复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的情况,对吧?
接近 3 年之前 回复

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

1

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

1

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

1

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

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
一个有趣的小问题
有兄弟三人:大毛,二毛,三毛。有帽子五顶:三顶蓝色,两顶红色。将这五顶帽子随机发给三个 兄弟,三兄弟站成一列,后面的人能看见站在他前面的人,按大毛、二毛、三毛的顺序站好。 帽子分发好后,大毛问三毛:你知道你的帽子是什么颜色的吗? 三毛说:我不知道。
工作中碰到的小问题
工作过程中的时常会碰到一些小问题,贴出来,供大家参考1. [标题:] [ASP.NET]System.UnauthorizedAccessException: 拒绝访问。[关键字:] 异常详细信息: System.UnauthorizedAccessException:拒绝访问[问题描述:]导出数据到Excel,报错;[报错抓图][解决方法:]当试图在ASP.NET里面
电脑日常小问题
U盘里文件全是快捷方式怎么办https://jingyan.baidu.com/article/1612d500a2f78ce20f1eee4a.html
JAVA SE 学习路径
基础入门 环境配置 语句基础 字符串 数组 方法 常用类 Math StringBuilder、StringBuffer Date、SimpleDateFormat、Calendar 面向对象 类和对象 封装、继承、多态 包装类 重写、重载 泛型 新特性 var:局部...
关于泛型和重载的小问题
 首先描述问题,看代码。代码例子: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;       } 
Java SE 基础部分经典100道笔试题
这100道题的范围主要是Java SE部分,正在学习Java SE的同学可以做一下,巩固一下学习的知识,也比较适合准备面试的同学复习使用。本题有90道选择题和10道填空题,选择题大部分是单选题,少数为多选,正确的选项已用红色字体标出。题比较简单,小伙伴们快来测试一下吧! 一、选择题(1分/题,90题) 1.名为HelloWorld.java的Java应用程序如下:    public c...
关于求解树的最小深度问题
这是一道典型的递归题;特殊情况:(树为空:深度为0和树只有根结点深度为1)后讨论其他情况;区分双子树和单子树单子树:1左子树为空,右子树不空,深度为右字数深度+12右子树为空,左子树不为空,深度为左子树深度+1(左/右子树深度由递归调用函数求出)双子树:左右子树均不为空,取深度为左右子树中的小值+1奉上代码如下:#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;malloc....
数组--C语言中关于数组的小问题
1、记得最初学C语言时,关于数组有这么一点:定义数组时,其长度不能用变量来表示。 但是今天一不小心写错了:char buf[len],居然编译通过,运行正确! 简单的测试程序,array_init.c如下: #include #include int main(int argc, char *argv[]){ int len = argc > 1 ? atoi(argv[1])
java SE 学习教程(面向对象高级程序设计)
java SE 学习教程(面向对象高级程序设计) 里面包含13个关于java se学习的word文档
java se基础书籍
关于java se的基础书籍,含think-in-java,与写给大忙人看的Java SE 8
java SE 两个小问题
我现在有两个问题:rn1. 我新建了一个MyJFrame继承JFrame 然后又新建了一个MyJPanel 继承JPanel rn [code=Java] public MyJFrame()rn rn setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rn setBounds(100, 100, 450, 300);rn contentPane = new MyJPanel(); //新建的JPanelrn contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));rn contentPane.setLayout(new BorderLayout(0, 0));rn setContentPane(contentPane);rn [/code]rn但是我在JPanel中托了几个JRadioButton 但是一运行却看不见那几个按钮rn但是可以在这个面板上画东西 画的问题出现了 看下rnrn2. 我想画个拖拽的椭圆,能看的到时时变化的那种 我用变量记录了 mousePressed mouseDragged 然后在mouseDragged里加了 repaint();rn[code=Java]protected void paintComponent(Graphics g) rn g.setXORMode(Color.gray); rn switch(state)rn rn case 1:rn g.drawRect(sx, sy, ex - sx, ey - sy);rn break;rn case 2:rn g.drawOval(sx, sy, ex - sx, ey - sy);rn break;rn default:rn break;rn rn rn [/code]rn 可以画出东西来 但是问题可能出现在异或上,我发现比如画的椭圆,本来就是线框,只有在相交的地方有异或,中间的地方没有,要怎么解决:[img=http://b304.photo.store.qq.com/psb?/V10VreYt4Pw63O/WaePr.By9r9wFBvU*yMO2pklSVmW6RfJMhcI.fg9Jo8!/b/YZTnO7VIbwAAYp*LNbUUbwAA][/img]
Java SE的IO小问题
[code=java]import java.io.FileInputStream;rnimport java.io.FileOutputStream;rnimport java.io.IOException;rnimport java.io.InputStreamReader;rnimport java.io.OutputStreamWriter;rnrnpublic class IODemo rnrn public static void main(String[] args) throws IOException rn OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("mytext.txt"), "utf-8");rn osw.write("你好");rn osw.close();rn rn InputStreamReader isr = new InputStreamReader(new FileInputStream("mytext.txt"), "utf-8");rn char[] cbuf = new char[10];rn int len = isr.read(cbuf);rn System.out.println(len);rn System.out.println(new String(cbuf, 0, len));rn rnrn[/code]rn我用UTF-8存储的“你好”是六个字节, 为什么打印len是2? new String(cbuf, 0, len)怎么知道cbuf里的数据是utf-8编码?
Java学习的3大难题,你都是怎么解决的?
Java难学,枯燥乏味,坚持不了等等,这些或许是初学者最烦恼的,其实学Java就三个问题,搞定了你就前途道路清晰,下面跟着小编一起来看看吧。 一、面向对象的历史演变 搞清楚面向对象的历史演变,Java的每个特性都是基于面向对象产生的。Java就是面向对象而生的,Java就是一种思想。你们人手不是有一本启蒙书籍叫think in Java麽? 国外书籍用的是think,国内的书籍都是深入理...
java:数组操作的两个常见小问题越界和空指针
package day02; public class Array { public static void main(String[]args){ int[] arr = new int[3]; // * a:ArrayIndexOutOfBoundsException:数组索引越界异常 // * 原因:你访问了不存在的索引。...
Java SE 小问题
刚开始学Java,之前编的程序运行都没问题,最近运行突然出问题,提示rnrn错误: 在类 Fibonacci 中找不到 main 方法, 请将 main 方法定义为:rn public static void main(String[] args)rn否则 JavaFX 应用程序类必须扩展javafx.application.Applicationrnrn很简单的一个程序,不知道为什么突然main方法错误了rnrnpublic class Fibonaccirn public static void main(String[] args) rn int n= Integer.valueOf(args[0]);rn int j[] = new int[n];rn for(int i=0;i
关于Scanner输入类的一个小问题
昨天参加了京东的笔试,因为输入数据的问题导致只有10%的数据ac,估计就gg了。痛定思痛,总结一下经验教训 首先,java的数据输入,自jdk1.5后,一般都采用Scanner类。 主要的api有next(),nextInt(),nextLine()等。 昨天的情景是需要输入一个小于20的数字n,之后输入两个n位数字(当时的理解就是数字,忽略了int长度的大小)。 由于我没
JavaSE 异常经典面试题及答案
什么是Java中的异常?   异常是在程序执行期间可能发生的错误事件,并且会中断它的正常流程。异常可能来自不同类型的情况,例如用户输入的错误数据,硬件故障,网络连接故障等。   每当执行java语句时发生任何错误,都会创建一个异常对象,然后JRE会尝试查找异常处理程序来处理异常。如果找到合适的异常处理程序,则将异常对象传递给处理程序代码以处理异常,称为捕获异常。如果未找到处理程序,则应用程...
【面试题】JavaSE基础常见面试题
基础部分1.Java语言的特性?跨平台性、面向对象、安全性、多线程、简单易用。2.& 和 && 的区别?&运算符表示按位与、逻辑与,而&&运算符是短路与运算。3.String是最基本的数据类型吗?基本数据类型包括byte、int、char、long、float、double、boolean和short。 取值范围是 -2^(字节数*8-1) ~ -2^(字节数*8-1) - 1,但Boolean是4
Java SE 源码 Java SE 源码
Java SE 源码Java SE 源码Java SE 源码Java SE 源码
java SE 1.6.zip
java SE 1.6.zip java SE 1.6.zip java SE 1.6.zip java SE 1.6.zip
java platform se binary 已停止工作的解决办法
在关闭java程序的时候一直出现该问题:十分搞笑一开始上网查了,有各种办法,环境变量的配置问题等等,最后在一个论坛上才看见对症的解决办法: 原来是和谷歌拼音输入法不兼容导致的 我将谷歌输入法切换为系统自带的微软输入法后,再无“ java platform se binary 已停止工作”的问题了。
JAVASE常见面试题
整理javase常见的面试题 int与integer的区别?==与equals()的区别?opp(面向对象)的三大特征?java是如何体现的? java中的引用与c语言中的指正有什么不同?String与StringBuffer,StringBulider的区别?final / finalize / finally的区别?抽象类和接口的区别?Overload和Override的区别?sleep()和wait()的区别?HashMap和HashTable的区别?
jpa1.0中文手册
这份文档是关于在Java EE和Java SE中管理持久化和对象/关系映射的Java API的规范
java se基础!java se
java se基础!java se
在线聊天(JavaSE实战项目)学习笔记
Chat0.1搭建窗口,有两种方式:一、继承Frame类(比较灵活)调用Frame类中的setLocation(int x, int y)方法设置窗口位置,setSize(int width, int height)方法设置窗口大小,setVisible(true)方法将窗口显示出来setSize(int width, int height):其实就是定义控件的大小,有两个参数,分别对应宽度和高度...
java se课程设计 图书管理系统源代码
java se课程设计 图书管理系统源代码java se课程设计 图书管理系统源代码java se课程设计 图书管理系统源代码java se课程设计 图书管理系统源代码java se课程设计 图书管理系统源代码
JDK各种版本下载地址
提供jdk的各种版本的下载地址,包括 Download Java SE 8 Download Java SE 7 Download Java SE 6 Download Java SE 5 Download Java SE 1.4 Download Java SE 1.3 Download Java SE 1.2 Download Java SE 1.1 Download JRockit Family Download Java SE Tutorials Download JDK 1.3 Documentation Download JDK 1.4.2 Documentation Download Java Client Technologies
JavaSE综合测试题
1. 在JAVA中,下列哪些说法是正确的( AB)   A.java源文件的扩展名为.java B.写好的java源程序可以直接运行 C.编写的源程序必须先编译后才能运行 D.程序员可以读懂扩展名为.class的文件 2. 下列标识符哪个是合法的(BD) A.class  B.$abc C.1234 D._name 3. 下面哪些赋值语句是正确的?(A) A. lon
NEC笔试题JAVA SE
JAVA SE NEC笔试题JAVA SE
jdk-10.0.2_windows-x64_bin.exe
Java SE 10.0.2 Java SE 10.0.2 is the latest feature release for the Java SE Platform 百度云共享链接
张龙 java se课程笔记
张龙 java se课程笔记张龙 java se课程笔记张龙 java se课程笔记张龙 java se课程笔记张龙 java se课程笔记张龙 java se课程笔记
Java虚拟机规范.Java SE 8版 01
Java虚拟机规范.Java SE 8版Java虚拟机规范.Java SE 8版Java虚拟机规范.Java SE 8版
14条原则 (4) 把大问题划分成小问题
14条原则 (4) 把大问题划分成小问题 这条原则的全文是,"把大问题划分成小问题,然后系统地检查每一个小问题,看是不是问题的起因。再大的问题都能按这种方法分成小问题加以解决。" 把整体划分成若干局部,这正是两千多年来人类一直在执行的方针,亚里士多德就论述过了,此后也鲜有进步。看起来很简单,但是执行起来非常困难。比如,如何划分一个问题。 这一条太难了,我也只能谈几个体会,求过路的牛人们不吝补
Java虚拟机规范-(Java SE 8版)
Java虚拟机规范-(Java SE 8版) Java虚拟机规范-(Java SE 8版) Java虚拟机规范-(Java SE 8版)
用JavaSE知识点完成登入注册界面
System.out.println("========欢迎使用本系统========"); System.out.println("1 - 注册"); System.out.println("2 - 登录"); System.out.println("3 - 退出"); System.out.print("请选择:");
如何看待:Oracle Java SE 8 发行版更新 ? --- 变向激励学习 JDK 10 吗?
阅读, 一方面获得信息, 二方面借鉴同样信息如何传达之方法, 三方面领会信息透出的意图、情感、精神、要旨。   基于此,本文适当解读如下: 一方面, 对于 Java 8 的技术更新支持要终止,个人使用截止2020年,商业使用截止2019年,也就意味着 Java 8 刚弄熟些就要下岗了。 二方面, 这样的通知估计你的产品发布后,欲求用户更新版本以促进产品之迭代,必将断其后继之支援,...
JavaSE的常见面试题
1、    1     byte a=3;          2     byte b=4;          3    byte c=a+b;          4    byte d=3+4; 以上哪一行有编译问题?应该如何解决?为什么会发生这样的问题?         byte(8)->short(16)->int(32)->long(64)->float(32)->double(
java se 与 java ee的区别 。多了一些包?
作者:知乎用户链接:https://www.zhihu.com/question/28832635/answer/42431133来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。自问自答,这几天想了一下这个问题,有一些收获。Java EE相比于Java SE来说,除了多出包(Package)以外,还多了若干Java容器,如Tomcat、GlassFish、IBM We...
JDK (Java SE)三种类型的区别
三个版本的区别: JDK 6 Update 7 for Windows JDK 6 Update 10 RC for Windows JRE 6 Update 10 RC for Windows
java 版本区别,java SE是什么,下载JDK时各个名称的含义
问题一:常用的Java的三个版本以及JAVA SE是什么一、Java的版本区别     常用的 java 程序分为  Java SE、java EE、Java ME三个版本,介绍如下:1. Java SE(Java Platform,Standard Edition)java se 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE是...
文章热词 Java Java教程 Java培训 Java学习 Java价格
相关热词 android8.0 se权限 c#脱壳工具 se android se权限 关于python培训班 关于区块链的课程