如果您有这样的for循环:
for(j = 0; j<=90; j++){}
它工作正常。但是,当您遇到这样的for循环时:
for(j = 0; j<=90; j+3){}
它不起作用。有人可以向我解释一下吗?
Answers:
那是因为j+3
不会改变的值j
。您需要将其替换为j = j + 3
或,j += 3
以使的值j
增加3:
for (j = 0; j <= 90; j += 3) { }
int j=0; for(;j<=90;){... j+=3;}
但这不是显而易见的;)
既然没有人真正解决过问题,Could someone please explain this to me?
我相信我会:
j++
是简写形式,不是实际操作(好吧,确实是,但是请耐心等待我的解释)
j++
j = j + 1;
除了不是宏或进行内联替换的东西外,它实际上等于该操作。关于的操作i+++++i
及其含义,这里有很多讨论(因为它可以解释为i++ + ++i
OR(i++)++ + i
这将我们带到:i++
与++i
。它们称为post-increment
和pre-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时间(假设编译器没有对其进行优化)。
我希望这可以为您澄清事物,并为您提供一些提出新问题的空间。干杯!
在您的示例中,j+=3
增量为3。
(这里没有太多要说的,如果与语法相关,我建议先使用Google搜索,但是我是新手,所以我可能是错的。)
j+3
哪些不实际增量j
。OP应该使用j += 3
。
更改
for(j = 0; j<=90; j+3)
至
for(j = 0; j<=90; j=j+3)
只需尝试一下
for(int i=0; i<5; i=i+2){//value increased by 2
//body
}
要么
for(int i=0; i<5; i+=2){//value increased by 2
//body
}
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.
如果您有这样的for循环:
for(j = 0; j<=90; j++){}
在此循环中,您使用的是Java语言提供的速记形式,它表示后缀运算符(use-then-change),它等效于j = j + 1,因此将更改后的值初始化并用于下一个操作。
for(j = 0; j<=90; j+3){}
在此循环中,您只是将值增加了3,而没有将其初始化回j变量,因此j的值保持不变。