Java 内部条件循环
Java Loop with condition inside
我在 Java 方面没有经验,但我需要在 KNIME 中创建 Java 片段节点。
我正在尝试编写一个基于特定条件创建 counter/iterator 的短循环。我设法编写了 IF THEN ELSE 部分,但我想知道如何将其放入循环中:
out_user_session_counter = 1;
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter + 1;
} else {
out_user_session_counter = out_user_session_counter + 0;
}
思路是:每次c_session_end.equals("session end")
那么 out_user_session_counter
应该增加 1
UPD.: 这是带有循环结果的数据模型的屏幕截图(不正确的结果):
正确的预期结果应该是 1 1 1 1 2 2 3 3 3 3 3
而不是 1 1 1 1 11 1 11 1 1 1 1
尝试这样的事情:
out_user_session_counter = 1;
int loopCycles = 10
for(int i = 0; i < loopCycles; i++){
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter + 1;
}
}
您需要使用 for
/while
循环来实现。
int out_user_session_counter = 1; //Step 1
while(c_session_end.equals("session_end")) { //Step 2
out_user_session_counter++; //Step 3
//Step 4 Other code to modify c_session_end.equals("session_end")
}
第1步这一步我们将变量初始化为1
步骤2. 而变量等于session_end
步骤 3. 将变量加 1(注意这与 out_user_session_counter = out_user_session_counter + 1; 相同)
第 4 步。 必须放置修改 c_session_end
值的代码,以便循环在某个点退出,否则循环将永远不会停止。
您的代码中发生的情况如下 => if(c_session_end.equals("session end"))
将变量递增 1,否则递增 0。
如果你想让它 运行 多次,你必须使用 while
或 for
循环。
您需要一个简单的循环,它会处理您的 else 部分。
int out_user_session_counter = 1;
while(c_session_end.equals("session end")){
out_user_session_counter++;
}
希望对您有所帮助。
嗯,我们不知道你在循环什么,但我假设你在循环一些 String
s。
此示例显示如何循环包含会话事件的 List<String>
,同时计算等于 "session end"
:
的会话事件
public static void main(String[] args) {
// create a data structure for sample data
List<String> sessionEvents = new ArrayList<String>();
// add some sample data
sessionEvents.add("session start");
sessionEvents.add("session somthing");
sessionEvents.add("session end");
sessionEvents.add("session start");
sessionEvents.add("session something");
sessionEvents.add("session something");
sessionEvents.add("session something");
sessionEvents.add("session end");
sessionEvents.add("session start");
sessionEvents.add("session something");
sessionEvents.add("session end");
// define a counter variable (considering Java naming conventions)
int outSessionCounter = 0;
// use an enhanced for loop (aka for-each loop)
for (String sessionEvent : sessionEvents) {
// every time the event is "session end"...
if (sessionEvent.equals("session end")) {
// ... increment the counter
outSessionCounter++;
}
}
// print the result
System.out.println("Amount of session ends is " + outSessionCounter);
}
This just counts occurrences of "session end"
, but you would have to tell us if you are using a different data structure or maybe even a stream.
我不太确定你想要实现什么,但我想我有一些东西
class Result{
public int out_user_session_counter = 1;
public String c_session_end;
}
Result r = new Result();
r.c_session_end = /*[whatever you want it to be];*/ "";
Thread thread = (new Thread(new Runnable() {
int out_user_session_counter = 1;
public void run() {
out_user_session_counter = 1;
while (!Thread.interrupted()) {
if (r.c_session_end.equals("session end")) {
out_user_session_counter++;
r.out_user_session_counter = out_user_session_counter;
}
//code to modify the r.c_session_end
}
}
}));
thread.start();
//to get the result do
int result = r.out_user_session_counter;
这将无限循环。(这可以在一个方法中进行)
您可以编辑结果对象以影响
您可以简单地执行以下操作:
out_user_session_counter = 1;
int loop_counter =0;
int rows = 10 //or some other variable that contains the number of rows
while(loop_counter < rows) {
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter++;
loop_counter++;
}
System.out.println(out_user_session_counter);
}
您需要做的就是在代码的外部添加一个循环。任何循环都可以,我使用了 while
循环。您也可以使用 for 循环。
for(int i = 0; ii < rows; ii++){
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter++;
}
System.out.println(out_user_session_counter);
}
或者,您可以使用 do-while
循环:
int index = 0;
do{
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter++;
index++;
}
System.out.println(out_user_session_counter);
} while (index < rows);
需要注意的是,使用do-while
循环,你总是会进入循环,即使没有可用的行(行数为0)。
此外,您不需要 else 部分,因为将 0 添加到您的值没有意义,您可以跳过它。
您需要循环计数器在 Java 代码段中的行之间保持不变。为此,您在代码段的 //Your custom variables:
部分定义它:
int sessionCounter=0;
然后在//Enter you code here:
部分:
if("session end".equalsIgnoreCase(c_column2)){
sessionCounter++;
}
out_user_session_counter = sessionCounter;
如图所示,带有 'session end' 的行将包含递增的计数器。如果您希望它包含旧计数器,请更改代码段,使上面的最后一行位于 if
语句之前。
您不需要将它放在 KNIME 中的循环中 - 片段的表达式部分已经为每个输入行按顺序计算。为清楚起见,在下面的代码段对话框中显示
我在 Java 方面没有经验,但我需要在 KNIME 中创建 Java 片段节点。
我正在尝试编写一个基于特定条件创建 counter/iterator 的短循环。我设法编写了 IF THEN ELSE 部分,但我想知道如何将其放入循环中:
out_user_session_counter = 1;
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter + 1;
} else {
out_user_session_counter = out_user_session_counter + 0;
}
思路是:每次c_session_end.equals("session end")
那么 out_user_session_counter
应该增加 1
UPD.: 这是带有循环结果的数据模型的屏幕截图(不正确的结果):
正确的预期结果应该是 1 1 1 1 2 2 3 3 3 3 3 而不是 1 1 1 1 11 1 11 1 1 1 1
尝试这样的事情:
out_user_session_counter = 1;
int loopCycles = 10
for(int i = 0; i < loopCycles; i++){
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter + 1;
}
}
您需要使用 for
/while
循环来实现。
int out_user_session_counter = 1; //Step 1
while(c_session_end.equals("session_end")) { //Step 2
out_user_session_counter++; //Step 3
//Step 4 Other code to modify c_session_end.equals("session_end")
}
第1步这一步我们将变量初始化为1
步骤2. 而变量等于session_end
步骤 3. 将变量加 1(注意这与 out_user_session_counter = out_user_session_counter + 1; 相同)
第 4 步。 必须放置修改 c_session_end
值的代码,以便循环在某个点退出,否则循环将永远不会停止。
您的代码中发生的情况如下 => if(c_session_end.equals("session end"))
将变量递增 1,否则递增 0。
如果你想让它 运行 多次,你必须使用 while
或 for
循环。
您需要一个简单的循环,它会处理您的 else 部分。
int out_user_session_counter = 1;
while(c_session_end.equals("session end")){
out_user_session_counter++;
}
希望对您有所帮助。
嗯,我们不知道你在循环什么,但我假设你在循环一些 String
s。
此示例显示如何循环包含会话事件的 List<String>
,同时计算等于 "session end"
:
public static void main(String[] args) {
// create a data structure for sample data
List<String> sessionEvents = new ArrayList<String>();
// add some sample data
sessionEvents.add("session start");
sessionEvents.add("session somthing");
sessionEvents.add("session end");
sessionEvents.add("session start");
sessionEvents.add("session something");
sessionEvents.add("session something");
sessionEvents.add("session something");
sessionEvents.add("session end");
sessionEvents.add("session start");
sessionEvents.add("session something");
sessionEvents.add("session end");
// define a counter variable (considering Java naming conventions)
int outSessionCounter = 0;
// use an enhanced for loop (aka for-each loop)
for (String sessionEvent : sessionEvents) {
// every time the event is "session end"...
if (sessionEvent.equals("session end")) {
// ... increment the counter
outSessionCounter++;
}
}
// print the result
System.out.println("Amount of session ends is " + outSessionCounter);
}
This just counts occurrences of
"session end"
, but you would have to tell us if you are using a different data structure or maybe even a stream.
我不太确定你想要实现什么,但我想我有一些东西
class Result{
public int out_user_session_counter = 1;
public String c_session_end;
}
Result r = new Result();
r.c_session_end = /*[whatever you want it to be];*/ "";
Thread thread = (new Thread(new Runnable() {
int out_user_session_counter = 1;
public void run() {
out_user_session_counter = 1;
while (!Thread.interrupted()) {
if (r.c_session_end.equals("session end")) {
out_user_session_counter++;
r.out_user_session_counter = out_user_session_counter;
}
//code to modify the r.c_session_end
}
}
}));
thread.start();
//to get the result do
int result = r.out_user_session_counter;
这将无限循环。(这可以在一个方法中进行) 您可以编辑结果对象以影响
您可以简单地执行以下操作:
out_user_session_counter = 1;
int loop_counter =0;
int rows = 10 //or some other variable that contains the number of rows
while(loop_counter < rows) {
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter++;
loop_counter++;
}
System.out.println(out_user_session_counter);
}
您需要做的就是在代码的外部添加一个循环。任何循环都可以,我使用了 while
循环。您也可以使用 for 循环。
for(int i = 0; ii < rows; ii++){
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter++;
}
System.out.println(out_user_session_counter);
}
或者,您可以使用 do-while
循环:
int index = 0;
do{
if (c_session_end.equals("session end")) {
out_user_session_counter = out_user_session_counter++;
index++;
}
System.out.println(out_user_session_counter);
} while (index < rows);
需要注意的是,使用do-while
循环,你总是会进入循环,即使没有可用的行(行数为0)。
此外,您不需要 else 部分,因为将 0 添加到您的值没有意义,您可以跳过它。
您需要循环计数器在 Java 代码段中的行之间保持不变。为此,您在代码段的 //Your custom variables:
部分定义它:
int sessionCounter=0;
然后在//Enter you code here:
部分:
if("session end".equalsIgnoreCase(c_column2)){
sessionCounter++;
}
out_user_session_counter = sessionCounter;
如图所示,带有 'session end' 的行将包含递增的计数器。如果您希望它包含旧计数器,请更改代码段,使上面的最后一行位于 if
语句之前。
您不需要将它放在 KNIME 中的循环中 - 片段的表达式部分已经为每个输入行按顺序计算。为清楚起见,在下面的代码段对话框中显示