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

Ant*_*ace 5 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);   
}
Run Code Online (Sandbox Code Playgroud)

但是,假设存在一种不同的情况,我们只想打印一个递减值,从初始值到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++;
   } 
}
Run Code Online (Sandbox Code Playgroud)

这种方法效果很好,但是必须创建第二个增量计数器似乎很麻烦.是否有任何涉及for循环的数学技巧或技巧可能会使counter多余?

Jon*_*eet 9

好吧,看起来你只想要:

for(int i = 10; i >= 0; i--){
    System.out.println(i);
    System.out.println(10 - i);
} 
Run Code Online (Sandbox Code Playgroud)

是这样的吗?就个人而言,我通常把它写成一个增加的循环,因为我发现它更容易思考:

for (int i = 0; i <= 10; i++) {
    System.out.println(10 - i);
    System.out.println(i);
} 
Run Code Online (Sandbox Code Playgroud)

请注意,顺便提一下,你的字符串示例效率非常低 - 远远超过引入额外变量.鉴于您知道开始涉及的长度,您可以从两个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);
Run Code Online (Sandbox Code Playgroud)

(当然,无论如何都只forwardString等于str......)

  • 神圣的废话,Jon Skeet! (2认同)

gnu*_*aes 5

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

for(int i = 10, j = 0; i >= 0; i--, j++) {
    System.out.println(i);
    System.out.println(j);
} 
Run Code Online (Sandbox Code Playgroud)