2011-01-03 18 views
57

Si usted tiene un bucle de esta manera:Cómo hacer bucles en aumento de Java por incrementos de 1 otros

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

Trabaja muy bien. Pero cuando tiene un ciclo for como este:

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

no funciona. ¿Podría alguien por favor explicarme esto?

+12

+1 para probar algo usted mismo primero antes de preguntar aquí. – Falmarri

+1

El efecto secundario de 'j ++' es? El efecto secundario de 'j + 3' es? –

Respuesta

8

En su ejemplo, j+=3 incrementa en 3.

(No hay mucho más que decir aquí, si está relacionado con la sintaxis que te sugiero buscar en Google en primer lugar, pero yo soy nuevo aquí, así que podría estar equivocado.)

+3

Tienes razón, pero la pregunta original tiene 'j + 3' que * no * realmente incrementa' j'. El OP debería usar 'j + = 3'. –

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

} 

j+3 no va a asignar el nuevo valor de j, añadir j=j+3 asignará el nuevo valor de j y el bucle se moverá hacia arriba por 3.

j++ es como decir j = j+1, por lo que en ese caso y asignando el nuevo valor a j justo como el de arriba.

+0

+1 - Buena explicación de los conceptos. – jmort253

88

Eso es porque j+3 no cambia el valor de j. Es necesario sustituir eso con j = j + 3 o j += 3 de manera que se incrementa el valor de j por 3:

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

Alternativamente podría 'int j = 0; para (; j <= 90;) {... j + = 3;} 'pero eso es obvio';) ' – jcolebrand

+6

@drachenstern En otras palabras, un ciclo while. – dkarp

+0

@dkarp ~ De hecho, pero dado que la mayoría de la gente no piensa en esa sintaxis, pensé en señalarla. Sobre todo porque el OP obviamente está aprendiendo Java y la programación a una edad temprana (consulte el profee y el blog vinculado). Ojalá hubiera tenido SO a esa edad. – jcolebrand

5

Cambio

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

a

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

La porción de "incremento" de una La declaración de bucle tiene que cambiar el valor de la variable de índice para que tenga algún efecto. La forma manual de "++ j" es "j = j + 1". Entonces, como han dicho otras respuestas, la forma correcta de tu incremento es "j = j + 3", que no tiene una taquigrafía tan breve como incrementar en uno. "j + 3", como ya sabes, en realidad no cambia j; es una expresión cuya evaluación no tiene efecto.

34

Dado que ninguna otra alternativa ha abordado Could someone please explain this to me? Creo que lo haré:

j++ es taquigrafía, que no es una operación real (bien lo que realmente es, pero hay que tener 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 hace reemplazo en línea. Hay muchas discusiones aquí sobre las operaciones de i+++++i y lo que eso significa (porque podría ser intepreted como i++ + ++i O (i++)++ + i

que nos lleva a:.. i++ frente ++i Se llaman los operadores post-increment y pre-increment Puede Puedes adivinar por qué se llaman así La parte importante es cómo se utilizan en tareas Por ejemplo, se podría hacer:?. j=i++; o j=++i; ahora haremos un experimento 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 voy a dar las respuestas y te permiten trabajar a cabo;)

i = 7, j = 5, k = 7; Ese es el poder de los operadores de incremento de pre y post, y los peligros de su uso incorrecto. Pero aquí está la forma alternativa de escribir el mismo orden de las 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 

Ok, ahora que te he mostrado cómo funciona el operador ++, vamos a examinar 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ás que la "taquigrafía expandida" tiene i = Y i + 1 que es todo lo que tu solicitud tiene.

Esto se remonta a las matemáticas. Se define una función donde f(x) = mx + b o una ecuación y = mx + b entonces ¿cómo llamamos mx + b ... ciertamente no es una función o ecuación. A lo sumo es una expresión. Lo cual es todo j+3 es, una expresión. Una expresión sin asignación no nos sirve de nada, pero requiere tiempo de CPU (suponiendo que el compilador no lo optimice).


Espero que aclare las cosas para usted y le da un margen para hacer nuevas preguntas. ¡Aclamaciones!

+1

También agregaré "Felicitaciones por ser [14 | 15] y hacer preguntas claras sobre los fundamentos del lenguaje en lugar de solo masturbarse haciendo zilch" y tengo algunos otros conceptos para que consideres una vez que hayas comprendido los conceptos básicos de esto si me gusta. – jcolebrand

+1

ordenado, TY, @jcolebrand. –

2

Debe ser así

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

pero cuidado con los

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

o

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

Si usted tiene un bucle de esta manera:

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

En este ciclo está usando la abreviatura proporcionada por el lenguaje java, que significa un operador postfix (use-then-change) que es equivalente a j = j + 1, por lo que el valor modificado se inicializa y se utiliza para la siguiente operación.

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

En este bucle se acaba de incrementas el valor de 3, pero no inicializar de nuevo a la variable j, por lo que el valor de j sigue siendo cambiado.

Cuestiones relacionadas