2012-10-17 72 views
4

假設存在一些情況,您希望在相同的循環中增加和減少值。在這種情況下,有些情況下你可以利用情況的性質來「欺騙」這種情況 - 例如,反轉一個字符串。在同一個循環中增量和減量的有效方法

由於建築弦的性質,我們真的沒有操縱迭代或添加一個額外的計數器:

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變得多餘?

+1

簡單算術有什麼問題? '10 - 我'? –

+0

@JakeKing我相信睡眠不足。 –

+2

發生在我們身上。 –

回答

8

那麼它看起來像你只是想:

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

+2

垃圾,Jon Skeet! –

+1

現在upvoting開始! ;-) – Arham

+0

我真的希望這會開始討論這類問題的效率問題,但我不確定如何解決這個問題。感謝您採取額外措施來闡述兩個示例! –

4

你可以有多個變量,增量器在for循環中。

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

與添加計數器變量有什麼不同?問題是要減少變量的數量。 – Arham

+0

不是。他只是要求它不那麼「雜亂」,並涉及for循環,所以我認爲這可能是他正在尋找的。 :) – gnunaes

+0

+ 1爲擴大我的主題知識。它確實不那麼「雜亂」,因爲它將所有東西都保存在循環中,並且因此處於我的問題的範圍之內。 –