【问题标题】:Efficient methods for Incrementing and Decrementing in the same Loop在同一个循环中递增和递减的有效方法
【发布时间】:2012-10-07 08:12:04
【问题描述】:

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

【问题讨论】:

  • 简单算术有什么问题? 10 - i?
  • @JakeKing 睡眠剥夺,我相信。

标签: java for-loop increment decrement


【解决方案1】:

嗯,它看起来就像你想要的那样:

for(int i = 10; i >= 0; i--){
    System.out.println(i);
    System.out.println(10 - i);
} 

是这样吗?就我个人而言,我通常会将其写为 increasing 循环,因为我觉得这样更容易考虑:

for (int i = 0; i <= 10; i++) {
    System.out.println(10 - i);
    System.out.println(i);
} 

请注意,顺便说一下,您的字符串示例真的效率低下 - 远不止引入一个额外的变量。鉴于您知道开始涉及的长度,您可以从两个大小合适的char[] 开始,每次都填充正确的索引。然后从每个之后创建一个字符串。同样,我会用 increasing 循环来做到这一点:

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...)

【讨论】:

  • 现在投票开始了!! ;-)
  • 我实际上希望这会引发关于此类问题的效率的讨论,但我不知道如何将其纳入问题。感谢您采取额外的步骤来详细说明这两个示例!
【解决方案2】:

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

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

【讨论】:

  • 这与添加计数器变量有何不同?...问题是减少变量的数量。
  • 不是。他只是要求它不那么“混乱”并涉及 for 循环,所以我认为这可能是他正在寻找的。 :)
  • +1 用于扩展我对该主题的了解。它确实不那么“混乱”,因为它将所有内容都保持在循环中,因此在我的问题范围内。
猜你喜欢
  • 2012-07-18
  • 2018-10-08
  • 2014-02-03
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多