我正在尝试将 2D 字符数组中的所有字母转换为数字。结果,我想要 a = 0, b=1, c=2, ...z=25。
然后,我尝试将其作为代码的一部分:
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') + '0');
}
}
}
我的代码的结果不是我以前期望的。
从"a"到"j",效果很好。但是,从"k"到"z",它没有打印出预期的数字。
我的代码有什么问题?
首先,您不能将数字 10 存储为单个字符。它是两个字符,1 和 0。因此,结果数组必须是 char 数组以外的其他内容。如果它是你int
使用的,那么你最好将它们存储在一个int数组中。
intarray[i][j] = (letters[i][j] - 'a');
其中 intarray 是与 char 数组大小相同的 int 值数组。另一种选择是创建一个字符串数组,如果必须将结果存储在同一个数组中,然后将其转换为数字,然后再转换为字符串。喜欢这个
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 使用,因为它们更容易进行数学运算。
您可以在不将其转换为 int 的情况下执行相同的操作,但这意味着您需要找出 char - 'a' 大于 10。如果是这样,您需要将数字除以 10,然后是数字的模数,并为每个数字提供关联的 ascii 符号以使它们成为字符串。这要复杂得多,也很难做到,特别是考虑到仅使用 ints 即可轻松做到这一点。
还有其他 2 个选项供您选择,但我仍然觉得上面的字符串选项是迄今为止最简单的。
首先是将 2d 数组作为整数。然后,您可以将整数初始化为字母。然后,您可以对它们进行算术以找到它们适合的数字。喜欢这个:
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');
}
}
}
要打印它,则需要将字符转换为整数。因此,您可以使用以下命令打印它们:
for (int i = 0; i < letters.length; i++) {
for (int j = 0; j < letters[i].length; j++) {
System.out.printf("%dn", (int) letters[i][j]);
}
}
这也可以工作,但它有点笨拙,你需要确保你一直将你必须的字符投射到一个 int。到目前为止,我认为字符串数组是最佳选择,但这取决于您的目标是什么。但是你不能做的一件事是将字符"10"存储在字符数组中,因为"10"不是单个字符,而是 2 个字符并且不适合字符。