2016-06-12 48 views
0

我理解遞歸和代碼的原理,但不理解循環,爲什麼變量在同一行,我們可以解釋循環是如何工作的?遞歸java - 不同的循環不懂如何工作

這一行:

for (int i = digit, j = 1; i >= 1; i--, j++) 

的代碼:

public static boolean hasSubSeries(int[] arr, int digit) { 
    return hasSubSeriesHelper(arr, arr.length, digit); 
} 

public static boolean hasSubSeriesHelper(int[] arr, int size, int digit) { 
    if (size == 0) 
     return false; 

    for (int i = digit, j = 1; i >= 1; i--, j++) { 
     if (arr[size - j] != i) 
      return hasSubSeriesHelper(arr, size - 1, digit); 
    } 

    return true; 
} 

謝的

+0

用於(初始化;如果爲false則停止;移動步驟)。對於你的情況,最初,我是數字,j是1.停止,直到我是0或更小。對於每一步,i--,j ++ – antonio081014

回答

0

你在一個for

  • N°1三個部分:變量的初始化(s)
  • N°2:評價繼續布爾表達式/停止循環
  • N°3:變量

您可能有多個初始化在第一部分中操作的變化,只要類型保持不變,以下是完全可能的:

我們在for聲明的第一部分中聲明並實例化了三個變量ñ。

for(int i = 2, j = 2*i, k = 4*j ; i < 3 ; i++) { 
    System.out.println(i + " " + j + " " + k); // 2 4 16 
} 
1

循環的結構如下:

for(starting conditions; verification at each loop; action at end of loop) 

在您的具體情況:

for (int i = digit, j = 1; i >= 1; i--, j++) 
  • 啓動條件:

    • 變量i它等於在函數hasSubSeriesHelper(int[] arr, int size, int digit)開始處給出的變量digits中包含的值。
    • 變量j開始於1
  • 在每個循環驗證:

    • 一旦每個循環完成後,我們將檢查這一點,如果這是真的,我們不斷的循環,如果不是我們退出循環。
    • 我們檢查在開始時聲明的i是否大於或等於1,如果是我們繼續循環,如果我們不停止。
  • 行動在循環結束:

    • 我們做兩個動作i--從而降低由1j++它通過1增加j價值的i值。

總之,如果你喜歡,你可以把它轉變爲while循環:

int i = digit; 
int j = 1; 
while (i >= 1) { 
    // the code inside the for loop goes here 
    i--; 
    j++; 
} 

注意,在最後的行動發生在循環中而開始condditions循環之前去。

這也應該說明爲什麼你可以在同一行中有不同的聲明,只要它們屬於同一類型即可。