使用Char访问数组元素

时间:2016-07-09 18:38:44

标签: java arrays

我正在进行一些Java练习并发生了一些我不完全理解的代码。

public static boolean permutation(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }

        int[] letters = new int[128];

        char[] s_array = s.toCharArray();
        for (char c : s_array) {
            letters[c]++;
        }
        // omitted other code
}

当我打印出letters的内容时,我看到一个整数数组。根据我传递给函数的字符串,该数组返回01的变体。

我认为可能Array课程正在将char转换为int。我添加了一个print语句来帮助,但是我看到d的值为13但我看到数组中的第13个元素仍为0。该代码如下所示:

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        String word1 = "dog";
        String word2 = "god";
        permutation(word1, word2);
    }

    public static boolean permutation(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }

        int[] letters = new int[128];

        char[] s_array = s.toCharArray();
        for (char c : s_array) {
            System.out.println(Character.getNumericValue(c));
            letters[c]++;
        }

        System.out.println(Arrays.toString(letters));
        return true;
    }
}

输出:

13
24
16
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我的问题是Array[char]语法转换为什么?

2 个答案:

答案 0 :(得分:1)

代码正在计算输入字符串s中的字母。您创建的字母为new int[128],因此您可以覆盖“普通”ASCII字符。然后letters[c]++增加了char c的计数器。 char可以在Java中用作int,因此letters[c]引用letters[<ASCII index of c>]

答案 1 :(得分:1)

Character.getNumericValue将“解释”字符作为数字返回。例如,字符'5'变为5。这也适用于表示罗马数字的unicode字符,例如十六进制数字。 (因此'd'变为'13'。)

但是,如果在期望值为整数值的上下文中使用char,则会使用其编码进行解释。例如'a'的代码为97,因此array['a']访问array的第98个元素。

这就是你的两个产出出现差异的原因。 ;)