Foros del Web » Programando para Internet » Javascript »

Bucle que imprime mal

Estas en el tema de Bucle que imprime mal en el foro de Javascript en Foros del Web. Hola, tengo un problema con este código y es que al imprimir la lista de propietarios hay puertas que se repiten en el bucle, que ...
  #1 (permalink)  
Antiguo 07/04/2014, 17:59
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Bucle que imprime mal

Hola, tengo un problema con este código y es que al imprimir la lista de propietarios hay puertas que se repiten en el bucle, que es lo que tengo mal? Muchas gracias.

index.html
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<title>Tarea 1 Junio</title>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<script type="text/javascript" src="./funciones.js"></script>
	</head>
	<body>
		
	</body>
</html>
funciones.js
Código:
//constructor de objetos tipo Edificio que recibe parametros
function edificio(calle, numero, codigo){
	
	//propiedades del objeto Edificio
	this.calle = calle;
	this.numero = numero;
	this.codigo = codigo;
	this.plantas = new Array(); // para las plantas creamos un array de plantas
	
	//metodos del objeto Edificio
	this.modificarNumero = function (numero) // metodo para modificar numero
	{
		this.numero = numero;
	};
	
	// metodo que agrega plantas al array plantas, y en cada planta agrega el numero de puertas
    this.agregarPlantasYPuertas = function(numPlantas, puertas)
    {
        if (this.plantas.length == 0)   // si el array no contiene elementos
        {
            for (var i = 0; i < numPlantas; i++)  // bucle para rellenar el array de plantas con un array por cada planta
            {
                this.plantas[i] = new Array();
                for (var j = 0; j < puertas; j++)   // bucle para añadir en cada array de plantas las puertas que hay, tb array
                {
                    this.plantas[i].push("");    // con metodo push se añaden elementos al array de puertas
                }
            }
        }
        else    // si esta creado el array se añaden plantas y puertas a las que ya habia
        {
            for (var i = 0; i < numPlantas; i++)
            {
                this.plantas[this.plantas.length] = new Array();
                for (var j = 0; j < puertas; j++)
                {
                    this.plantas[this.plantas.length-1].push("");
                }
            }
        }
    };
	this.modificarCalle = function (calle)
	{
		this.calle = calle;
	};
	
	this.modificarCodigoPostal = function (codigo)
	{
		this.codigo = codigo;
	};
	
	this.imprimeCalle = function ()
	{
		return this.calle;
	};
	
	this.imprimeNumero = function ()
	{
		return this.numero;
	};
	
	this.imprimeCodigoPostal = function ()
	{
		return this.codigo;
	};
	
	this.imprimePlantas = function()    // metodo que imprime informacion de las plantas
    {
        document.write("<h4>Listado de propietarios del edificio de la calle " + this.imprimeCalle() + " con numero: " + this.imprimeNumero() + "</h4>");
        for(var i = 0;i < this.plantas.length;i++)
        {
            for(var j = 0;j < this.plantas[i].length;j++)
            {
                document.write("<li>El propietario de la puerta "+(parseInt(edificioA.plantas[i].indexOf(edificioA.plantas[i][j]))+1)+" de la planta "+(parseInt(edificioA.plantas.indexOf(edificioA.plantas[i]))+1)+": "+edificioA.plantas[i][j]+"</li>");
            }
        }
    };
    
    this.agregarPropietario = function(nombre, planta, puerta)  // metodo que agrega propietario a cada puerta de cada planta
    {
        this.plantas[planta][puerta] = nombre;
        document.write("<li>"+edificioA.plantas[planta][puerta] + " es ahora el propietario de la puerta " + (parseInt(edificioA.plantas[planta].indexOf(edificioA.plantas[planta][puerta]))+1) + " de la planta " + (parseInt(edificioA.plantas.indexOf(edificioA.plantas[planta]))+1) + ".</li>");
        
    };
	
	document.write("<li>Construido nuevo edificio en calle: "+calle+", nº: "+numero+", CP: "+codigo+".</ul>");
}

document.write("Instanciamos 3 objetos edificioA, edificioB y edificioC con estos datos:</br></br>");

var edificioA = new edificio("Garcia Prieto",58,15706);
var edificioB = new edificio("Camino Caneiro",29,32004);
var edificioC = new edificio("San Clemente","s/n",15705);

document.write("<br/><br/>");
document.write("<li>El código postal del edificio A es: "+edificioA.imprimeCodigoPostal()+".</li>");
document.write("<li>La calle del edificio C es: "+edificioC.imprimeCalle()+".</li>");
document.write("<li>El edificio B está situado en la calle "+edificioB.imprimeCalle()+" número "+edificioB.imprimeNumero()+".</li>");
document.write("<br/>");

edificioA.agregarPlantasYPuertas(2, 3);

document.write("Agregamos " + edificioA.plantas.length + " plantas y " + edificioA.plantas[0].length + " puertas por planta al edificio A...<br/>");

document.write("<br/>Agregamos 4 propietarios al edificio A...<br/><br/>");

edificioA.agregarPropietario("Jose Antonio Lopez.", 0, 0);
edificioA.agregarPropietario("Luisa Martinez.", 0, 1);
edificioA.agregarPropietario("Marta Castellón.", 0, 2);
edificioA.agregarPropietario("Antonio Pereira.", 1, 1);

edificioA.imprimePlantas();

document.write("<br/>Agregamos 1 planta más al edificio A...<br/><br/>");
document.write("Agregamos 1 propietario más al edificio A planta 3, puerta 2...<br/>");
edificioA.agregarPlantasYPuertas(1, 3);

document.write("</br>");
edificioA.agregarPropietario(" Pedro Meijide", 2, 1);

edificioA.imprimePlantas();
  #2 (permalink)  
Antiguo 08/04/2014, 01:50
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Bucle que imprime mal

Prueba con esto en imprimePlantas:
Código Javascript:
Ver original
  1. document.write(
  2.          "<li>El propietario de la puerta " + parseInt(j + 1) +
  3.          " de la planta " + parseInt(i + 1) +
  4.          ": " + edificioA.plantas[i][j] + "</li>");
  #3 (permalink)  
Antiguo 08/04/2014, 03:32
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Bucle que imprime mal

Muchas gracias bathorz ahora funciona perfecto :)
  #4 (permalink)  
Antiguo 08/04/2014, 04:31
 
Fecha de Ingreso: mayo-2011
Ubicación: Zaragoza
Mensajes: 58
Antigüedad: 13 años
Puntos: 5
Respuesta: Bucle que imprime mal

Buenas:

Te has dado cuenta que no es que se repita en realidad? Es que al hacer la comprobacion con un string vacio siempre devuelve el primero.

Fijate que el numero de plantas y puertas es las que le pones al edificio.

Saludos.
  #5 (permalink)  
Antiguo 08/04/2014, 04:36
 
Fecha de Ingreso: mayo-2011
Ubicación: Zaragoza
Mensajes: 58
Antigüedad: 13 años
Puntos: 5
Respuesta: Bucle que imprime mal

Una cosa mas:

Por que vas usando todo el tiempo "this.plantas..." y luego dentro de imprimePlantas usas "edificioA.plantas[i][j]"?? es como que si te refirieras a la instancia. Cuando intentes agregar propietarios en un edificio diferente de A e intentar imprimirlos no te va a funcionar.

Saludos.

Etiquetas: bucle, funcion, html, imprime, js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:24.