8

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

4

2 回答 2

13

好吧,看起来你只是想要:

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

于 2012-10-17T06:03:35.723 回答
6

for您可以在一个循环中有多个变量和增量器。

for(int i = 10, j = 0; i >= 0; i--, j++) {
    System.out.println(i);
    System.out.println(j);
} 
于 2012-10-17T06:07:28.203 回答