definicion - for loop java español
Alternar entre operaciones en un bucle for (13)
¿Por qué no tener dos variables adicionales y el incremento uno y disminuyó el otro?
int y = 0;
int z = 10;
for(int i = 10; i >= 5; i--) {
System.out.print(z + " " + y + " ");
y++;
z--;
}
Salida:
10 0 9 1 8 2 7 3 6 4 5 5
Sin embargo, también podemos hacer esto sin variables adicionales:
for(int i = 10; i >= 5; i--) {
System.out.print(i + " " + 10-i + " ");
}
Soy un principiante de Java, por favor ten paciencia conmigo. :) No he aprendido nada como afirmaciones y, por el momento, solo he aprendido sobre bucles, variables y clases. Necesito escribir un solo bucle que produzca la siguiente salida:
10 0 9 1 8 2 7 3 6 4 5 5
Puedo ver en el segmento, que la diferencia entre los números se reduce en uno, por lo que de 10 a 0 se resta de 10, luego de 0 a 9 se agrega de 9 y continúa alternando entre sumar y restar.
Mi idea fue crear el bucle donde mi variable i = 10
disminuye en 1 en el bucle ( i--
) pero no estoy seguro de cómo alternar entre sumar y restar en el bucle .
public class Exercise7 {
public static void main(String[] args) {
for(int i = 10; i >= 0; i--) {
System.out.print(i + " ");
}
}
}
¿Quién dijo que solo se puede usar un System.out.print
en el bucle?
for (int i=0; i < 5; i++) {
System.out.print((10 - i) + " " + (i + 1) + " ");
}
Algunas cosas no necesitan pensarse demasiado:
public class Answer2 {
public static void main(String[] args) {
for (int i = 0; i <= 5; i++){
System.out.println(i);
System.out.println(10 - i);
}
}
}
editar
Usted puede y debe generalizar su tarea. Aquí hay un ejemplo de cómo podría hacerlo (no escribiré el método, ya que es su trabajo, en vez de eso alteraré mi respuesta solo para mostrarle las posibilidades)
public class Answer2 {
private static final Random RANDOM = new Random();
public static void main(String[] args) {
//You can use any upper bound for ''someLength''
int someLength = 1 + RANDOM.nextInt(20);
for (int i = 0; i <= someLength / 2; i++) {
System.out.println(someLength - i);
System.out.println(i);
}
}
}
Deberías pensar en generalizar la serie. Como has observado, la serie alterna entre suma y resta. Además, la diferencia se reduce en uno en cada paso. Puede definir variables para estos dos y ajustarlas en el bucle.
public static void main(String[] args) {
int term = 10;
int sign = 1;
for(int delta = 10; delta >= -1; delta--) {
System.out.print(term + " ");
sign = -1 * sign;
term = term + sign * delta;
}
}
Esto es aquí. La lista de salida es una lista de combinaciones para hacer 10; 10 0 9 1 8 2 7 3 6 4 5 5
10 + 0 = 10
9 + 1 = 10
8 + 2 = 10
7 + 3 = 10
6 + 4 = 10
5 + 5 = 10
int n = 10;
int half = n / 2;
if(n % 2 == 1){
half++;
}
for(int x = n; x >= half;x--){
int remainder = n % x;
if(remainder == 0){
remainder = n - x;
}
System.out.print(x);
System.out.print(" ");
System.out.println(remainder);
}
Esto se parece un poco a una tarea, por lo que no le daré el código de trabajo.
Pero recuerde que puede colocar varias declaraciones de impresión dentro del bucle for. No necesariamente tiene que iterar 10 veces para obtener su salida. 5 veces es totalmente suficiente. Y como ya se dijo en un comentario anterior: los números alternan entre i y 10-i, para el rango correcto de i.
No creo que el OP realmente quisiera que alguien les hiciera la tarea, así que me atendré a responder la pregunta que realmente hicieron: cómo alternar entre dos operaciones dentro de un bucle (para que puedan mantener el algoritmo que crearon con :)
).
Hay un ingenioso "truco" que se usa muy a menudo cuando queremos hacer algo en cualquier otra iteración en la mayoría de los lenguajes de programación. Definitivamente lo encontrarás en tu vida, y podría ser desconcertante si no tienes idea de lo que está pasando, ¡así que aquí va!
El operador de módulo ( %
) producirá el resto de la división entre sus operandos .
Por ejemplo, considere lo siguiente: 7 ÷ 2 = 3.5
Cuando trabajas para enteros, dirías que 7 ÷ 2 = 3
, entonces te queda 1
.
En este caso, cuando todas las variables son int
s, en Java, 7 / 2
sería 3
y 7 % 2
es 1
.
Eso es módulo para ti!
Lo que es interesante acerca de este operador es inherente a lo que es interesante acerca de la división en general, y un caso en particular: el resto de una división por 2
siempre es 0
o 1
... ¡y se alterna ! Esa es la palabra clave aquí.
Aquí viene el "truco" (no es realmente un truco, es básicamente un patrón teniendo en cuenta el uso generalizado) de las operaciones alternas sobre iteraciones:
- tomar cualquier variable que se incremente cada iteración en un bucle
- prueba para el resto de la división de esa variable por
2
- si es
0
, haz algo, de lo contrario (será1
), ¡toma el camino alternativo!
En su caso, para responder a su pregunta real (aunque otros tienen buenos puntos, no estoy tratando de quitarle eso a nadie), podría considerar usar algo como eso:
if( i % 2 == 0 ) {
// i is even, subtract
} else {
// i is odd, add
}
¡Eso te permitiría seguir con el algoritmo que inicialmente pensaste!
O puedes hacerlo de esta manera, si quieres ser un sabio;)
for(int i = 0, arr[] = {10,0,9,1,8,2,7,3,6,4,5,5}; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
Probé este código. Funciono para mi
for(int i = 10; i >= 5; i--) {
System.out.print(i + " ");
System.out.print(10-i + " ");
}
Reemplace i >= 0
con i >= 5
agregue esto: System.out.print((10-i--) + " ");
empezando por lo que hiciste
public class Exercise7 {
public static void main(String[] args) {
for(int i = 10; i >= 5; ) {
System.out.print(i + " " + (10-i--) + " ");
}
}
}
Simplemente ejecuta un bucle comenzando desde 0 o comenzando desde 10.
1. Si empiezas desde las 10
for(int i=10;i>=5;i--){
System.out.print(i + " " + (10-i) + " ");
}
2. Si empiezas desde 0
for(int i=0;i<=5;i++){
System.out.print((10-i) + " " + i + " ");
}
La salida será: 10 0 9 1 8 2 7 3 6 4 5 5
int d = 0;
for(int i = 10; i >= 5; i--) {
System.out.print(i + " " + d + " ");
d++;
}
public class exercise7 {
public static void main(String[] args) {
for(int i = 10; i >= 5; i--) {
System.out.print(i + " " + (10-i) + " ");
}
}
}