Alternativamente, podría, int j=0; for(;j<=90;){... j+=3;}pero eso no es obvio;)
jcolebrand
6
@drachenstern En otras palabras, un ciclo while.
dkarp
@dkarp ~ De hecho, pero dado que la mayoría de la gente no piensa en esa sintaxis, pensé en señalarlo. Especialmente porque el OP obviamente está aprendiendo Java y programación a una edad temprana (consulte el profee y el blog vinculado). Ojalá hubiera tenido TAN a esa edad.
jcolebrand
44
Dado que nadie más ha abordado realmente Could someone please explain this to me?, creo que lo haré:
j++ es una abreviatura, no es una operación real (ok, realmente lo ES, pero tengan paciencia conmigo para la explicación)
j++es realmente igual a la operación j = j + 1;excepto que no es una macro o algo que reemplaza en línea. Hay muchas discusiones aquí sobre las operaciones de i+++++iy lo que eso significa (porque podría interpretarse como i++ + ++iOR(i++)++ + i
Lo que nos lleva a: i++versus ++i. Se denominan operadores post-incrementy pre-increment. ¿Puedes adivinar por qué se llaman así? La parte importante es cómo se utilizan en las asignaciones. Por ejemplo, podría hacer: j=i++;o j=++i;Ahora haremos un experimento de ejemplo:
// 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
¿Cuáles son los valores de i, j y k?
Te daré las respuestas y dejaré que lo resuelvas;)
i = 7, j = 5, k = 7;Ese es el poder de los operadores de incremento previo y posterior, y los peligros de usarlos incorrectamente. Pero aquí está la forma alternativa de escribir el mismo orden de operaciones:
// 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
Bien, ahora que le he mostrado cómo funciona el ++operador, examinemos por qué no funciona para j+3... ¿Recuerda cómo lo llamé "taquigrafía" antes? Eso es todo, vea el segundo ejemplo, porque eso es efectivamente lo que hace el compilador antes de usar el comando (es más complicado que eso, pero eso no es para las primeras explicaciones). Entonces verá que la "taquigrafía expandida" tiene i =Y, i + 1que es todo lo que tiene su solicitud.
Esto vuelve a las matemáticas. Una función se define donde f(x) = mx + bo una ecuación, y = mx + bentonces, ¿cómo lo llamamos mx + b? Ciertamente no es una función o ecuación. A lo sumo es una expresión. Que es todo j+3es, una expresión. Una expresión sin asignación no nos sirve de nada, pero consume tiempo de CPU (asumiendo que el compilador no la optimiza).
Espero que eso le aclare las cosas y le dé algo de espacio para hacer nuevas preguntas. ¡Salud!
(No hay mucho más que decir aquí, si está relacionado con la sintaxis, sugeriría buscar en Google primero, pero soy nuevo aquí, así que podría estar equivocado).
j ++ significa j = j + 1, el valor de j ya es 0 ahora estamos agregando 1 así que ahora el valor de la suma de j + 1 se convirtió en 1, finalmente estamos anulando el valor de j (0) con el valor de la suma (1) así que aquí estamos anulando el valor j por j + 1. Entonces, cada valor de la iteración j se incrementará en 1.
for(j = 0; j<=90; j+3){}
Aquí j + 3 significa j valor ya 0 ahora estamos agregando 3 así que ahora el valor de la suma de j + 3 se convirtió en 3 pero no estamos anulando el valor j existente. Para que JVM le pregunte al programador, está calculando el nuevo valor pero asignando ese valor a una variable (es decir, j). Es por eso que recibimos el error en tiempo de compilación "AssignmentOperator no válido".
Si queremos incrementar el valor j en 3, entonces podemos usar cualquiera de las siguientes formas.
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.
La parte de "incremento" de una declaración de ciclo tiene que cambiar el valor de la variable de índice para tener algún efecto. La forma a mano de "++ j" es "j = j + 1". Entonces, como han dicho otras respuestas, la forma correcta de su incremento es "j = j + 3", que no tiene una abreviatura tan concisa como incrementar en uno. "j + 3", como ya sabe, en realidad no cambia j; es una expresión cuya evaluación no tiene ningún efecto.
En este ciclo, está utilizando la abreviatura proporcionada por el lenguaje java, que significa un operador de sufijo (use-then-change) que es equivalente a j = j + 1, por lo que el valor cambiado se inicializa y se usa para la siguiente operación.
for(j = 0; j<=90; j+3){}
En este ciclo, solo incrementa su valor en 3 pero no lo inicializa de nuevo a la variable j, por lo que el valor de j permanece cambiado.
j++
es? ¿El efecto secundario dej+3
es?Respuestas:
Eso es porque
j+3
no cambia el valor dej
. Debe reemplazar eso conj = j + 3
oj += 3
para que el valor dej
aumente en 3:for (j = 0; j <= 90; j += 3) { }
fuente
int j=0; for(;j<=90;){... j+=3;}
pero eso no es obvio;)
Dado que nadie más ha abordado realmente
Could someone please explain this to me?
, creo que lo haré:j++
es una abreviatura, no es una operación real (ok, realmente lo ES, pero tengan paciencia conmigo para la explicación)j++
es realmente igual a la operaciónj = j + 1;
excepto que no es una macro o algo que reemplaza en línea. Hay muchas discusiones aquí sobre las operaciones dei+++++i
y lo que eso significa (porque podría interpretarse comoi++ + ++i
OR(i++)++ + i
Lo que nos lleva a:
i++
versus++i
. Se denominan operadorespost-increment
ypre-increment
. ¿Puedes adivinar por qué se llaman así? La parte importante es cómo se utilizan en las asignaciones. Por ejemplo, podría hacer:j=i++;
oj=++i;
Ahora haremos un experimento de ejemplo:// 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
¿Cuáles son los valores de i, j y k?
Te daré las respuestas y dejaré que lo resuelvas;)
i = 7, j = 5, k = 7;
Ese es el poder de los operadores de incremento previo y posterior, y los peligros de usarlos incorrectamente. Pero aquí está la forma alternativa de escribir el mismo orden de operaciones:// 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
Bien, ahora que le he mostrado cómo funciona el
++
operador, examinemos por qué no funciona paraj+3
... ¿Recuerda cómo lo llamé "taquigrafía" antes? Eso es todo, vea el segundo ejemplo, porque eso es efectivamente lo que hace el compilador antes de usar el comando (es más complicado que eso, pero eso no es para las primeras explicaciones). Entonces verá que la "taquigrafía expandida" tienei =
Y,i + 1
que es todo lo que tiene su solicitud.Esto vuelve a las matemáticas. Una función se define donde
f(x) = mx + b
o una ecuación,y = mx + b
entonces, ¿cómo lo llamamosmx + b
? Ciertamente no es una función o ecuación. A lo sumo es una expresión. Que es todoj+3
es, una expresión. Una expresión sin asignación no nos sirve de nada, pero consume tiempo de CPU (asumiendo que el compilador no la optimiza).Espero que eso le aclare las cosas y le dé algo de espacio para hacer nuevas preguntas. ¡Salud!
fuente
En su ejemplo, se
j+=3
incrementa en 3.(No hay mucho más que decir aquí, si está relacionado con la sintaxis, sugeriría buscar en Google primero, pero soy nuevo aquí, así que podría estar equivocado).
fuente
j+3
que en realidad no aumentaj
. El OP debería usarj += 3
.for(j = 0; j<=90; j = j+3) { }
j+3
no asignará el nuevo valor a j, addj=j+3
asignará el nuevo valor a j y el ciclo se moverá hacia arriba en 3.j++
es como decirj = j+1
, entonces en ese caso estás asignando el nuevo valor a j como el anterior.fuente
Cambio
for(j = 0; j<=90; j+3)
a
for(j = 0; j<=90; j=j+3)
fuente
Debería ser así
for(int j = 0; j<=90; j += 3)
pero cuidado con
for(int j = 0; j<=90; j =+ 3)
o
for(int j = 0; j<=90; j = j + 3)
fuente
Simplemente prueba esto
for(int i=0; i<5; i=i+2){//value increased by 2 //body }
O
for(int i=0; i<5; i+=2){//value increased by 2 //body }
fuente
También puede escribir código como
for(int i=0;i<n;i++) { //statements; i=i+2;//cause you want to increment i by 3 }
fuente
for(j = 0; j<=90; j++){}
j ++ significa j = j + 1, el valor de j ya es 0 ahora estamos agregando 1 así que ahora el valor de la suma de j + 1 se convirtió en 1, finalmente estamos anulando el valor de j (0) con el valor de la suma (1) así que aquí estamos anulando el valor j por j + 1. Entonces, cada valor de la iteración j se incrementará en 1.
for(j = 0; j<=90; j+3){}
Aquí j + 3 significa j valor ya 0 ahora estamos agregando 3 así que ahora el valor de la suma de j + 3 se convirtió en 3 pero no estamos anulando el valor j existente. Para que JVM le pregunte al programador, está calculando el nuevo valor pero asignando ese valor a una variable (es decir, j). Es por eso que recibimos el error en tiempo de compilación "AssignmentOperator no válido".
Si queremos incrementar el valor j en 3, entonces podemos usar cualquiera de las siguientes formas.
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.
fuente
La parte de "incremento" de una declaración de ciclo tiene que cambiar el valor de la variable de índice para tener algún efecto. La forma a mano de "++ j" es "j = j + 1". Entonces, como han dicho otras respuestas, la forma correcta de su incremento es "j = j + 3", que no tiene una abreviatura tan concisa como incrementar en uno. "j + 3", como ya sabe, en realidad no cambia j; es una expresión cuya evaluación no tiene ningún efecto.
fuente
Si tiene un bucle for como este:
for(j = 0; j<=90; j++){}
En este ciclo, está utilizando la abreviatura proporcionada por el lenguaje java, que significa un operador de sufijo (use-then-change) que es equivalente a j = j + 1, por lo que el valor cambiado se inicializa y se usa para la siguiente operación.
for(j = 0; j<=90; j+3){}
En este ciclo, solo incrementa su valor en 3 pero no lo inicializa de nuevo a la variable j, por lo que el valor de j permanece cambiado.
fuente
Es solo un error de sintaxis. Solo tienes que reemplazar
j+3
porj=j+3
oj+=3
.fuente
for (let i = 0; i <= value; i+=n) { // increments by n /*code statement*/ }
este formato funciona para mí aumentando el índice en n
for (let i = 0; i <= value; i+=4) { // increments by 4 /*code statement*/ }
si n = 4 esto se incrementará en 4
fuente