首先,您不能将数字 10 存储为单个字符。它是两个字符,1 和 0。所以结果数组必须是 char 数组以外的东西。如果您使用的是int,那么您最好将它们存储在一个 int 数组中。
intarray[i][j] = (letters[i][j] - 'a'); 其中 intarray 是您的 int 值数组,其大小与 char 数组相同。如果您必须将结果存储在同一个数组中并将其转换为数字然后再转换为字符串,则另一种选择是创建一个字符串数组。像这样
String [][] letters = {{"i", "u"}, {"a", "g"}, {"e", "k"}};
for (int i = 0; i < letters.length; i++) {
for (int j = 0; j < letters[i].length; j++) {
if (letters[i][j].charAt(0) >= 'a' && letters[i][j].charAt(0) <= 'z') {
letters[i][j] = Integer.toString((letters[i][j].charAt(0) - 'a');
}
}
}
原因是 ascii 表只有数字 0 到 9 作为符号。因此,在您的情况下,您将获得前 10 个要转换的字母,但之后您开始在 ascii 表中获得各种符号。 k 例如是 :, l 是 ; m 是
您可以在不将其转换为 int 的情况下执行相同的操作,但这意味着您需要找出 char - 'a' 大于 10。如果是这样,您需要将数字除以 10,然后再取模编号并为它们中的每一个赋予相关的 ascii 符号以将它们变成一个字符串。这要复杂得多,而且很难做到,特别是考虑到仅使用 int 来做到这一点是多么容易。
您还有其他 2 个选项,但我仍然觉得上面的字符串选项是迄今为止最简单的。
首先是将二维数组作为一个整数。然后,您可以将整数初始化为字母。然后你可以对它们进行算术运算以找到它们适合的数字。像这样:
int [][] letters = {{'i', 'u'}, {'a', 'g'}, {'e', 'k'}};
for (int i = 0; i < letters.length; i++) {
for (int j = 0; j < letters[i].length; j++) {
if (letters[i][j] >= 'a' && letters[i][j] <= 'z') {
letters[i][j] = (letters[i][j] - 'a');
}
}
}
这将具有相同的效果。这样做的问题是打印实际字母需要更多的努力,最后您需要将其转换为字符。所以我不推荐这种方式。
第二种选择是将所有内容作为 char 值存储在 char 数组中。像这样:
char [][] letters = {{'i', 'u'}, {'a', 'g'}, {'e', 'k'}};
for (int i = 0; i < letters.length; i++) {
for (int j = 0; j < letters[i].length; j++) {
if (letters[i][j] >= 'a' && letters[i][j] <= 'z') {
letters[i][j] = (char) (letters[i][j] - 'a');
}
}
}
要打印它,您需要将 char 转换为 int。所以你可以打印它们:
for (int i = 0; i < letters.length; i++) {
for (int j = 0; j < letters[i].length; j++) {
System.out.printf("%d\n", (int) letters[i][j]);
}
}
这也可以工作,但它有点hacky,你需要确保你一直将你必须的char转换为int。到目前为止,我认为字符串数组是最好的选择,但这取决于你的目标是什么。但是您不能做的一件事是将字符“10”存储在字符数组中,因为“10”不是单个字符而是 2 个字符,并且不适合一个字符。