このようなforループがある場合:
for(j = 0; j<=90; j++){}
それはうまくいきます。しかし、次のようなforループがある場合:
for(j = 0; j<=90; j+3){}
それは機能しません。誰かが私にこれを説明してもらえますか?
このようなforループがある場合:
for(j = 0; j<=90; j++){}
それはうまくいきます。しかし、次のようなforループがある場合:
for(j = 0; j<=90; j+3){}
それは機能しません。誰かが私にこれを説明してもらえますか?
回答:
これj+3
は、の値が変更されないためですj
。の値が3増加するように、j = j + 3
またはに置き換える必要があります。j += 3
j
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
andpre-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ずつ増加します。
(ここで言うことはあまりありません。構文に関連している場合は、最初にグーグルをお勧めしますが、ここでは新しいので、間違っている可能性があります。)
j+3
j
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になります。最後に、j値(0)を合計値(1)でオーバーライドします。 j値をj + 1でオーバーライドします。したがって、各反復j値は1ずつ増加します。
for(j = 0; j<=90; j+3){}
ここで、j + 3はj値がすでに0であることを意味し、3を加算しているため、j + 3の合計値は3になりましたが、既存のj値をオーバーライドしていません。そのため、JVMがプログラマーに尋ねると、新しい値を計算しますが、その値を変数(つまり、j)に割り当てます。そのため、コンパイル時エラー「invalidAssignmentOperator」が発生します。
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言語によって提供される省略形を使用しています。これは、j = j + 1と同等の接尾辞演算子(use-then-change)を意味するため、変更された値が初期化され、次の操作に使用されます。
for(j = 0; j<=90; j+3){}
このループでは、値を3ずつインクリメントしますが、初期化してj変数に戻さないため、jの値は変更されたままになります。
これは単なる構文エラーです。あなただけ交換する必要がj+3
でj=j+3
たりj+=3
。