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));
添加回答
举报