有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组Java:用字符减去字符意味着什么?

最近在参加一个项目时,我遇到了一个问题。 下面是节目的一部分

public static int numberNeeded(String first, String second) {
        int[] lettercounts = new int[26];
        for(char c : first.toCharArray()){
            lettercounts[c-'a']++;
        }

我不明白这行代码的作用:

lettercounts[c-'a']++;

我猜它是增加特定字符的lettercounts数组中的值(最初为0);我猜“a”的索引是0,“z”是25。但我想了解这段代码是如何工作的


共 (3) 个答案

  1. # 1 楼答案

    Java中的char变量是数值。因此,从c的值中减去'a'将给出它与字母表开头的偏移量。这允许您使用此值作为数组索引,正如您正确猜测的那样

  2. # 2 楼答案

    目标是统计每个角色的出现次数

    c - 'a'
    

    是一种获取字符在字母表中位置的聪明方法'a' - 'a'将给您0'b' - 'a'会给你1'c' - 'a'会给你2,以此类推

    该值用作数组的索引(正如您正确说明的那样,数组以零初始化),并且计数递增


    值得注意的是,如果字符串中存在除a-z以外的任何字符(包括大写字符),并且您将看到^{},则此操作将中断

  3. # 3 楼答案

    这基本上只是将字符('a'在您的示例中)转换为它所代表的字母表中的字母数字a'实际上有一个ASCII(技术上是utf-16,其前255个值是ASCII值)数值(97)。所有其他角色也是如此。因此,如果字符是“b”,那么将访问数组的第二个元素(在位置1,98-97=1)。如果字符为“z”,则数组的第26个元素将被acessed(在位置25)。通过在搜索引擎中键入“ASCII表”,您可以轻松找到ASCII值表

    int a = 'b' - 'a';
    

    同:

    int b = 98 - 97;
    

    注意:不能在小写和大写字母之间执行此操作,因为它们具有完全不同的ASCII值(“A”,例如是65,而“A”是97)