如何使Java中的循环增加1以外的增量

时间:2011-01-03 02:29:26

标签: java loops for-loop

如果您有这样的for循环:

for(j = 0; j<=90; j++){}

工作正常。但是当你有这样的for循环时:

for(j = 0; j<=90; j+3){}

它不起作用。有人可以向我解释一下吗?

13 个答案:

答案 0 :(得分:100)

这是因为j+3不会更改j的值。您需要将其替换为j = j + 3j += 3,以便将j的值增加3:

for (j = 0; j <= 90; j += 3) { }

答案 1 :(得分:39)

由于没有其他人真正解决Could someone please explain this to me?我相信我会:

j++是简写,它不是一个实际的操作(确实它确实是,但请耐心解释)

j++实际上等于操作j = j + 1;,除了它不是宏或内联替换的东西。这里有很多关于i+++++i的操作以及这意味着什么的讨论(因为它可以解释为i++ + ++i(i++)++ + i

这将我们带到:i++++i。它们被称为post-incrementpre-increment运算符。你能猜出他们为什么这么命名吗?重要的部分是它们如何用于作业。例如,您可以执行:j=i++;j=++i;我们现在将进行示例实验:

// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;

// yes we could have already set the value to 5 before, but I chose not to.
i = 5;

j = i++;
k = ++i;

print(i, j, k); 
//pretend this command prints them out nicely 
//to the console screen or something, it's an example

i,j和k的值是什么?

我会给你答案并让你解决它;)

i = 7, j = 5, k = 7;这就是前后增量运算符的强大功能,以及使用它们的危险。但是,这是编写相同操作顺序的另一种方式:

// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;

// yes we could have already set the value to 5 before, but I chose not to.
i = 5;

j = i;
i = i + 1; //post-increment

i = i + 1; //pre-increment
k = i;

print(i, j, k); 
//pretend this command prints them out nicely 
//to the console screen or something, it's an example

好的,现在我已经向您展示了++运算符的工作原理,让我们来看看为什么它不适用于j+3 ...还记得我之前怎么称它为“速记”?就是这样,请看第二个例子,因为在使用命令之前,有效编译器所做的事情(它比这更复杂,但这不是第一个解释)。因此,您会看到“展开的速记”包含i =i + 1,这就是您的请求。

这可以追溯到数学。函数定义在f(x) = mx + b或等式y = mx + b的位置,所以我们称之为mx + b ...它肯定不是函数或等式。最多只是表达。所有j+3都是表达式。没有赋值的表达式对我们没有好处,但它确实占用了CPU时间(假设编译器没有优化它)。


我希望能为您澄清一些事情,并为您提供一些提出新问题的空间。干杯!

答案 2 :(得分:9)

在您的示例中,j+=3增加3。

(这里没什么好说的,如果它的语法相关我先建议谷歌搜索,但我是新来的,所以我可能是错的。)

答案 3 :(得分:7)

for(j = 0; j<=90; j = j+3)
{

}

j+3不会将新值分配给j,添加j=j+3会将新值分配给j,循环将向上移动3.

j++就像在说j = j+1,所以在这种情况下,您将新值分配给j,就像上面那样。

答案 4 :(得分:6)

更改

for(j = 0; j<=90; j+3)

for(j = 0; j<=90; j=j+3)

答案 5 :(得分:4)

应该是这样的

for(int j = 0; j<=90; j += 3) 

但请注意

for(int j = 0; j<=90; j =+ 3) 

for(int j = 0; j<=90; j = j + 3)

答案 6 :(得分:1)

您还可以将代码编写为

for(int i=0;i<n;i++)
{
      //statements;
      i=i+2;//cause you want to increment i by 3 
}

答案 7 :(得分:0)

循环语句的“增量”部分必须更改索引变量的值才能生效。 “++ j”的缩写形式是“j = j + 1”。所以,正如其他答案所说的那样,增量的正确形式是“j = j + 3”,它没有像递增1那样简洁的简写。如你所知,“j + 3”实际上并没有改变j;这是一种表达,其评价无效。

答案 8 :(得分:0)

如果您有这样的for循环:

for(j = 0; j<=90; j++){}

在这个循环中,你使用java语言提供的简写,这意味着后缀运算符(use-then-change)等同于j = j + 1,因此更改的值被初始化并用于下一个操作。

for(j = 0; j<=90; j+3){}

在这个循环中,你只需要将值增加3但不将其初始化为j变量,因此j的值仍然会改变。

答案 9 :(得分:0)

for(j = 0; j<=90; j++){}

j ++表示j = j + 1,j值已经为0,现在我们加1,所以现在j + 1的和值为1,最后我们用和值(1)覆盖j值(0)      所以在这里我们将j值覆盖j + 1。因此,每次迭代j值都会增加1。

for(j = 0; j<=90; j+3){}

这里j + 3表示j值已经为0,现在我们加3,所以j + 3的总和变为3,但是我们不覆盖现有的j值。因此JVM要求程序员,您正在计算新值,但是在哪里将该值分配给变量(即j)。这就是为什么我们遇到编译时错误“ invalid AssignmentOperator”的原因。

如果我们不想将j值增加3,则可以使用以下任一方法。

 for (int j=0; j<=90; j+=3)  --> here each iteration j value will be incremented by 3.
 for (int j=0; j<=90; j=j+3) --> here each iteration j value will be incremented by 3.  

答案 10 :(得分:0)

只需尝试

for(int i=0; i<5; i=i+2){//value increased by 2
//body
}

OR

for(int i=0; i<5; i+=2){//value increased by 2
//body
}

答案 11 :(得分:0)

这只是语法错误。您只需将OFFSET X - 1替换为j+3j=j+3

答案 12 :(得分:0)

for (let i = 0; i <= value; i+=n) { // increments by n
/*code statement*/
}

此格式适用于我将索引增加n

for (let i = 0; i <= value; i+=4) { // increments by 4
/*code statement*/
}

如果n = 4,它将增加4