我想要一個簡單的回圈函式來計算 java 編程中如下所示的回圈次數:
for (int i = 0; i <3; i ) {
count = count 1;
}
System.out.println(count);
我正在使用 Pentaho 資料集成來做這件事。所以我有 1 個作業包含 3 個轉換,其中第一個轉換設定回圈數(上面的示例 3),然后第二個轉換單擊“執行每個輸入行”進行回圈,并使用 JavascriptgetVariable()和setVariable()函式在轉換中設定變數。最后一次轉換只是獲取變數并寫入日志以顯示計數。問題是轉換 2 中的每個回圈都會將變數設為 0。所以最終結果是result = 1,我期望的是3.
在此處添加了專案檔案:
我更喜歡使用引數(下一個選項卡)而不是引數/變數,但這是我的偏好。
uj5u.com熱心網友回復:
問題是,在 t2 轉換中,您正在獲取變數并同時為同一個變數設定新值,這在同一個轉換中不起作用。當您關閉 Set variable 步驟時,您會收到以下警告:

為了避免這種情況,您需要使用兩個變數,一個在執行回圈之前設定,另一個在每次執行回圈時或在使用最后一個值執行回圈之后設定。
我已經修改了您的作業以使其作業,在 t1 轉換中,我添加了一個使用添加序列步驟創建的新欄位 (rownum_seq),以了解在每次執行回圈時向變數 cnt 添加多少。我本可以使用您的 id 欄位,但如果您在現實世界的作業中沒有類似的欄位,那么這就是您實作類似目標所需的步驟。我修改了變數名以更清楚地說明我在做什么,在 t1 中我設定了變數var_cnt_before的值。
在t2中轉化,我讀var_cnt_before,并設定的值var_cnt_after作為var_cnt_before rownum_seq的總和,此手段我改變var_cnt_after的執行每個時間t2的值。
在 t3 轉換中,我讀取了 var_cnt_after,它具有 t2 的最后一次執行的值。
您也可以在t1中計算var_cnt_after而不在t2中修改它,使用Group by step來獲取rownum_seq的最大值,因此您不需要每次執行t2時都修改該變數,具體取決于您需要實作的目標您可能需要使用它或在 t2 中更改,或者您只需要最終值,以便在 t1 中計算它。
這是修改后的作業和轉換的鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/356234.html
下一篇:惡補 Java 基礎
