首先,您不能將數字10存儲爲單個字符。它是兩個字符,1和0.所以結果數組必須是別的字符數組。如果它是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,但這意味着你需要找出字符 - 'a'大於10。如果是這樣,你需要得到的數字除以10,然後模數數字,並給他們每個相關的ASCII符號,使他們成爲一個字符串。這要複雜得多,很難做到,特別是考慮只要用整數就可以輕鬆實現。
還有其他兩種選擇,但我仍然覺得上面的字符串選項是最簡單的。
首先將2d數組作爲int。然後,您可以將整數初始化爲字母。然後你可以對它們進行算術運算,找到它們適合的數字。像這樣:
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]);
}
}
那麼這將工作很好,但它是一個有點哈克,你需要確保你投你的字符爲int所有的時間。到目前爲止,我認爲字符串數組是最好的選擇,但它取決於你的目標是什麼。但是你不能做的一件事就是將char'10'存儲在char數組中,因爲'10'不是一個字符,而是兩個字符,並且不適合字符。
請顯示字母的聲明以及它是如何填充的。 – OldProgrammer
請解釋你爲什麼要進行字符算術:'((字母[i] [j] - 'a')+'0')' – aliteralmind
那麼你的問題是你正在創建字符的ASCII碼數字符號。 ascii表沒有10個或更多的數字。所以當你得到數字10時,結果可能是: – Asthor