在同一循环中增量和减量的有效方法

时间:2012-10-17 06:01:49

标签: java for-loop increment decrement

假设存在一些情况,您希望在同一个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多余?

2 个答案:

答案 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);
}