我正在尝试打印Aa Bb Cc,但它总是重复A到z,然后B到z。
char ch, ch2;
for(ch = 'A'; ch <= 'Z'; ch++){
for(ch2 = 'a'; ch2 <= 'z'; ch2++)
System.out.println(ch + "" + ch2);
答案 0 :(得分:4)
您不希望嵌套循环:
url: "/base/{param1}-{*param2}/more/routing",
但是一个单个:
for(ch = 'A'; ch <= 'Z'; ch++)
for(ch2 = 'a'; ch2 <= 'z'; ch2++) {
/* All combinations of ch and ch2: Aa..AzBa..Bz..Za..Zz */
}
编辑:for(char ch = 'A'; ch <= 'Z'; ch++){
System.out.println(ch + "" + (char)(ch - 'A' + 'a'));
代表什么?
(char)(ch - 'A' + 'a')
最后,由于 ch in 'A'..'Z' range (from for loop)
ch - 'A' in 0..26 range
ch - 'A' + 'a' in 'a'..'z' range
的类型为ch - 'A' + 'a
,并且希望它为int
,而不是'a'
,因此我们将int bak强制转换为96
,也可以使用{ {1}}如普罗霍罗夫(M. Prokhorov)在以下评论中所建议:
(char)
答案 1 :(得分:0)
如@Dmitry所示,您不需要嵌套循环。
您可以利用以下事实:由于字符的表示方式,Java char
可以与int
进行相互转换。有关详细信息,请参见Wikipedia article on ASCII。它还具有每个字符的ASCII值的便捷图表。例如,A
是ASCII 65,a
是ASCII97。也就是说,您可以进行算术运算以在大写和小写字母之间进行“转换”。大写字母和小写字母相差32。
话虽如此,您可以使用两行代码来做到这一点:
for(char ch = 'A'; ch <= 'Z'; ch++){
System.out.println(ch + "" + (char)(ch + 32));
或者您也可以使用@Dmitry建议的出色解决方案之一。
答案 2 :(得分:0)
嵌套循环的工作方式:
第1步:首先,编译器将检查第一个for循环中的条件。
如果条件为True,则For循环内的语句为 被执行。这意味着,编译器将进入第二个For循环(在您的情况下ch的值为'A')。 转到 步骤2
如果条件为False,则编译器将从For Loop中退出
第2步:编译器将检查第二个for循环内的条件。
第3步:从第二个for循环退出后,编译器将检查for循环内的条件(重复第1步)(此处,外循环变量ch的值为'B'等等)
一个简单的技巧可能是在循环外初始化ch2变量并使用一个简单的循环:
char ch, ch2 = 'a';
for(ch = 'A'; ch <= 'Z'; ch++){
System.out.println(ch + "" + ch2++);}
}