3 回答

TA貢獻1828條經驗 獲得超4個贊
你不需要嵌套循環,試試這個:
char[] tab = new char[26];
for (int i = 0, j = 65; j < 91; j++, i++) {
tab[i] = (char) j;
}
for (int i = 0; i < 26; i++) {
System.out.println(tab[i]);
}
此外,數組大小應該是 26 而不是 25。

TA貢獻1871條經驗 獲得超8個贊
你的算法是錯誤的。
檢查這個更簡單的解決方案:
public static void main(String[] args)
{
char []tab = new char[25];
for (int i = 0; i<25; i++) {
tab[i] = (char)(i+65);
}
for (int i=0; i<25; i++) {
System.out.println(tab[i]);
}
}
您的代碼將所有字母從 A 到 Z 放在選項卡數組的每個槽中,在執行“j”循環時,這就是為什么你只有 Zs。

TA貢獻1854條經驗 獲得超8個贊
讓我們看看你的代碼是如何工作的:
for (int i = 0; i<25; i++) { //1
for (int j=65; j<91; j++) { //2
tab[i] = (char)j; //3
} //4
} //5
1) 外循環組i=0,
2) 內循環組j=65
3)(char)65代表'A'螞蟻被放置在tab[0]
2) 內循環組j=66
3)(char)66代表'B'并且也被放置在tab[0]
在這里您應該注意到問題,即內部循環正在處理相同i的 ,因此在迭代 A...Z 時,它正在修改相同的數組位置,這意味著該位置將保存最后一個放置在那里的值,即'Z'. (順便說一句i<25應該是i<26)
可能的解決方案
不要使用內部循環,您可以通過添加Unicode 表中的代碼點i來計算應該放在索引處的值65'A'
for (int i=0; i<26; i++)
tab[i] = (char)(65+i);
順便說一句,您可以通過避免使用幻數來進一步提高此代碼的可讀性(更多信息:什么是幻數,為什么它不好?)。所以這段代碼可以重寫為:
int amountOfLetters = 'Z' - 'A' + 1;
char[] tab = new char[amountOfLetters];
int i = 0;
for (char ch = 'A'; ch <= 'Z'; ch++) {
tab[i++] = ch;
}
System.out.println(new String(tab));
添加回答
舉報