我正在进行一些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
的内容时,我看到一个整数数组。根据我传递给函数的字符串,该数组返回0
和1
的变体。
我认为可能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]
语法转换为什么?
答案 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个元素。
这就是你的两个产出出现差异的原因。 ;)