Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Cambiar el bucle for por el bucle while

Hola a todos.

A ver si alguien me puede ayudar...
Estoy estudiando online java y la verdad es que no se me da muy bien.
Tengo un ejercicio resuelto, se llama "Dibujad un triángulo". El enunciado es el que sigue: Haz un programa llamado "DibujaTriangulo" que lee desde el teclado un valor entero y muestre por pantalla un triangulo rectángulo compuesto enteramente por letras "a", con la altura determinada por el valor que hemos introducido manualmente.

El código es este:

/**
* Objetivo: dibuja un triangulo con letras "a"
* 16-nov-2013
* Autor: IOC
*/
import java.util.Scanner;

public class DibujaTrianguloFor {
public static void main (String[] args) {
Scanner lector = new Scanner(System.in);
System.out.print("¿Qué altura quieres? ");
int alt = lector.nextInt();
lector.nextLine();
int numAs = 1;
//Una iteración por línea.
for(int i = 0; i < alt; i++) {
//Escribimos x números de letras "a".
for(int j = 0; j < numAs; j++) {
System.out.print("a");
}
numAs++;
System.out.println();
}
}
}

Obviamente, el código funciona. El problema que tengo, es que no entiendo porqué no funciona la adaptación que he intentado crear sustituyendo for por while.

/**
* Objetivo: dibuja un triangulo con letras "a"
* 16-nov-2013
* Autor: Jordi B.
*/
import java.util.Scanner;

public class DibujaTrianguloWhile {
public static void main (String[] args) {
Scanner lector = new Scanner(System.in);
System.out.print("¿Qué altura quieres? ");
int alt = lector.nextInt();
lector.nextLine();
int numAs = 1;
int i = 0;
int j = 0;
//Una iteración por línea.
while(i < alt) {
//Escribimos x números de letras "a".
while(j < numAs) {
System.out.print("a");
j = j+1;
}
i=i+1;
numAs++;
System.out.println();
}
}
}

¿Alguien me podría decir donde me he equivocado?

Un saludo.

noviembre 17, 2013 | Registered Commenterpchl1970

Buenas tienes que poner j = 0 dentro del primer while para que te pueda mostrar la cantidad de "a" correspondientes... La diferencia con el for es que como tienes 2 for anidados al entrar al segundo for se te declaraba j = 0, en cambio en el while al entrar al 2do while donde haces la comparacion j < numAs este llevaba el valor anterior por eso solo te mostraba 1 sola "a" ... Te dejo el codigo y cualquier cosa no dudes en preguntar ;)

Scanner lector = new Scanner(System.in);
System.out.print("¿Qué altura quieres? ");
int alt = lector.nextInt();
lector.nextLine();
int numAs = 1;
int i = 0;
int j = 0;
while(i < alt) {
while(j < numAs) {
System.out.print("a");
j+=1;
}
i+=1;
numAs++;
j = 0;
System.out.println();
}

noviembre 17, 2013 | Unregistered CommenterTriBlack

Efectivamente TriBlack, el código que has hecho funciona perfecto.
La verdad es que no entendía porqué fallaba, lo has explicado muy bien. Había hecho una versión mixta con un bloque "while" y dentro uno "for" totalmente funcional. Pero con los dos "while" no había manera...

Muchas gracias. ;)

noviembre 17, 2013 | Registered Commenterpchl1970