Java - Ayuda Loos for Anidados

   
Vista:

Ayuda Loos for Anidados

Publicado por omar (57 intervenciones) el 19/06/2015 17:11:22
Hola, alguien podr{ia explicarme como funcionan los for anidados??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package cmo;
import java.util.Scanner;
import static java.lang.System.out;
/**
 *
 * @author cmo
 */
public class OrdenarMatriz {
    protected String nombre[];
    protected int edad[];
    Scanner teclado=new Scanner(System.in);
    OrdenarMatriz(){
        nombre=new String[4];
        edad=new int[4];
        for (int i=0; i<nombre.length;i++){
            out.println("Ingrese nombre "+(i+1)+":");
            nombre[i]=teclado.next();
            out.println("Ingrese edad "+(i+1)+":");
            edad[i]=teclado.nextInt();
    }
}

[b]Esta es la parte que no entiendo, no podria ordenarse el array con un solo for??
Como es que los nombres se ordenan paralelamente ya que un nombre[z] podria no corresponder a edad[z]
y por que hace en el segundo for z=edad.length-1-i??


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
protected void ordenDesc(){
        for(int i=0; i<edad.length; i++){
            for(int z=0; z<edad.length-1-i; z++){
                if(edad[z]<edad[z+1]){
                int auxEdad=edad[z];
                edad[z]=edad[z+1];
                edad[z+1]=auxEdad;
                String auxNom=nombre[z];
                nombre[z]=nombre[z+1];
                nombre[z+1]=auxNom;
            }
            }
       }
    }
    protected void mostrarDatos(){
        ordenDesc();
        for(int i=0; i<nombre.length; i++){
            out.println("Nombre: "+nombre[i]+" Edad: "+edad[i]);
            out.println();
        }
    }
 
public static void main(String ar[]){
        OrdenarMatriz datos=new OrdenarMatriz();
        datos.mostrarDatos();
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda Loos for Anidados

Publicado por Lostiland (4 intervenciones) el 20/06/2015 12:08:59
Hola.

No, te explico, supongamos que tenemos los siguientes arrays:

Nombre: n1, n2, n3
Edad: 20, 24, 28

Supongamos ahora que tienes sólo un bucle for, vamos iteracción por iteracción:
i=0: edad(0) < edad(1) -> Los arrays resultantes son:
Nombre: n2, n1, n3
Edad: 24, 20, 28

i=1: edad(1) < edad(2) -> Los arrays resultantes son:
Nombre: n2, n3, n1
Edad: 24, 28, 20

Fin del programa.

Como puedes ver, un único bucle for "desplaza" un único campo hasta su posición final, pero no garantiza que todos los demás estén ordenados, por eso necesitas otro bucle, para hacer esta operación n veces. Si te fijas, en el bucle for interno hace: for(int z=0; z<edad.length-1-i; z++), el hecho de que haga z<edad.length-1-i es porque no necesita ordenar los últimos i elementos, porque ya habría llegado ahí en las iteracciones anteriores, me explico mejor, fíjate en el ejemplo: ahora tendría que recorrer todo el array otra vez, pero no es necesario llegar al final, porque ya no hay ningún número menor que el que se ha colocado en la última iteracción.

Esto es cierto para todos los casos: supongamos que en vez de tener (n3, 28) tenemos (n3, 18), los arrays resultantes del ejemplo anterior serían:
Nombre: n2, n1, n3
Edad: 24, 20, 15

Como puedes ver, tampoco es necesario llegar al final en este caso.

Espero haberme explicado bien.

Si sigues teniendo cualquier duda, no dudes en preguntar.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Ayuda Loos for Anidados

Publicado por omar (57 intervenciones) el 21/06/2015 03:08:12
MUch{isimas gracias!! si, lo entendi bien. Con tus explicaciones y un par de programitas experimentales. Hay algo que sigo siempre, como una regla, que me sirve para todo, no solo en programacion, y es , nunca hacer algo sin entender lo que estoy haciendo... muchas gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar