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


80

如果您有这样的for循环:

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

它工作正常。但是,当您遇到这样的for循环时:

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

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


17
+1:先尝试自己尝试一下,然后再问这里。
法尔玛里2011年

1
的副作用j++是?的副作用j+3是?

Answers:


116

那是因为j+3不会改变的值j。您需要将其替换为j = j + 3或,j += 3以使的值j增加3:

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

2
或者,他可以,int j=0; for(;j<=90;){... j+=3;}但这不是显而易见的;)
jcolebrand 2011年

6
@drachenstern换句话说,一个while循环。
2011年

@dkarp〜的确如此,但是看到大多数人不怎么考虑该语法后,我想指出这一点。尤其是因为OP很显然在年轻的时候就学习Java和编程(请检查权限和链接的博客)。我希望我在那个年龄有过。
jcolebrand

44

既然没有人真正解决过问题,Could someone please explain this to me?我相信我会:

j++ 是简写形式,不是实际操作(好吧,确实是,但是请耐心等待我的解释)

j++j = j + 1;除了不是宏或进行内联替换的东西外,它实际上等于该操作。关于的操作i+++++i及其含义,这里有很多讨论(因为它可以解释为i++ + ++iOR(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 =AND i + 1(即您的请求所具有的全部)。

这可以回到数学上。函数定义在何处f(x) = mx + b或方程式中,y = mx + b所以我们称之为mx + b...它肯定不是函数或方程式。最多是一种表达。这就是j+3一个表达。没有赋值的表达式对我们没有好处,但是会占用CPU时间(假设编译器没有对其进行优化)。


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


9

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

(这里没有太多要说的,如果与语法相关,我建议先使用Google搜索,但是我是新手,所以我可能是错的。)


3
你说得对,但原来的问题有j+3哪些实际增量j。OP应该使用j += 3
Greg Hewgill 2011年

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

}

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

j++就像说j = j+1,因此在这种情况下,就像上面的一样,您将新值分配给j。



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)


1

您也可以将代码编写为

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

1
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.  

0

循环语句的“增量”部分必须更改索引变量的值才能生效。“ ++ j”的简化形式为“ j = j + 1”。因此,正如其他答案所言,递增的正确形式是“ j = j + 3”,它不像递增一那么简单。您现在知道的“ j + 3”实际上并没有改变j;这是一个其评估无效的表达式。


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的值保持不变。



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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.