假设存在一些情况,您希望在同一个for循环中递增和递减值。在这种情况下,在某些情况下,您可以通过利用情况的性质来“欺骗”这种情况 - 例如,反转字符串。
由于构建字符串的性质,我们实际上不必操纵迭代或添加额外的计数器:
public static void stringReversal(){
String str = "Banana";
String forwardStr = new String();
String backwardStr = new String();
for(int i = str.length()-1; i >= 0; i--){
forwardStr = str.charAt(i)+forwardStr;
backwardStr = backwardStr+str.charAt(i);
}
System.out.println("Forward String: "+forwardStr);
System.out.println("Backward String: "+backwardStr);
}
但是,假设存在一种不同的情况,我们只想打印一个递减的值,从初始值到0,以及递增的值,从0到初始值。
public static void incrementAndDecrement(){
int counter = 0;
for(int i = 10; i >= 0; i--){
System.out.println(i);
System.out.println(counter);
counter++;
}
}
这很好用,但是必须创建第二个增量计数器似乎很麻烦。是否有任何涉及for循环的数学技巧或技巧可能会使counter
多余?
答案 0 :(得分:9)
嗯,看起来就像你想要的那样:
for(int i = 10; i >= 0; i--){
System.out.println(i);
System.out.println(10 - i);
}
是这样的吗?就个人而言,我通常把它写成增加循环,因为我觉得更容易思考:
for (int i = 0; i <= 10; i++) {
System.out.println(10 - i);
System.out.println(i);
}
请注意,顺便提一下,你的字符串示例真的效率低 - 远远超过引入额外变量。鉴于你知道开始涉及的长度,你可以从正确大小的两个char[]
开始,每次填充正确的索引。然后从每个创建一个字符串。我再次使用增加循环执行此操作:
char[] forwardChars = new char[str.length()];
char[] reverseChars = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
forwardChars[i] = str.charAt(i);
reverseChars[reverseChars.length - i - 1] = str.charAt(i);
}
String forwardString = new String(forwardChars);
String reverseString = new String(reverseChars);
(当然forwardString
在这种情况下只会等于str
......)
答案 1 :(得分:5)
您可以在for
循环中拥有多个变量和增量。
for(int i = 10, j = 0; i >= 0; i--, j++) {
System.out.println(i);
System.out.println(j);
}