Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problemas con una lista

Estas en el tema de Problemas con una lista en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, tengo una clase que armé de Lista doblemente enlazada ordenada. el código de mi clase está en el siguiente link: http://www.demiens.com.ar/LinkedList/LinkedList.zip los archivos que ...
  #1 (permalink)  
Antiguo 07/07/2005, 19:53
 
Fecha de Ingreso: noviembre-2004
Mensajes: 19
Antigüedad: 19 años, 5 meses
Puntos: 0
Problemas con una lista

Buenas, tengo una clase que armé de Lista doblemente enlazada ordenada.

el código de mi clase está en el siguiente link:

http://www.demiens.com.ar/LinkedList/LinkedList.zip

los archivos que armé son SortedList.php y test.php.

La idea de la clase es que es una lista que recibe el nombre de una función para comparar datos y lo utiliza para determinar en que posicion debe ir guardando la info.

Lo hice heredando de una clase de www.phpclasses.org que comprobé qeu funciona, y mi clase también funciona cuando la pruebo localmente, sin embargo cuando lo subo al servidor... se corta la lista por algún motivo. Lo más raro del asunto es por ejemplo, si estoy guardando un vector con varias posiciones y hago la prueba con distintas funciones que comparan diferentes posiciones del vector, con alguna funciona y con otras no.

Esto me está volivendo loco.. ya tuve el mismo problema en dos servidores remotos pero me sigue andando perfecto (exactametne el mismo script) en mi máquina.

Si alguien tiene la suficiente paciencia para checkearlo va a tener mi agradecimiento eterno.

para tener una demostración de cómo no funciona bien:
http://www.demiens.com.ar/LinkedList/test.php
__________________
I'm gonna Beta-test your girlfriend
  #2 (permalink)  
Antiguo 08/07/2005, 13:18
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Los errores, en general, tienen que ver con las referencias.
El más crítico es no haber referenciado un par de métodos en ListNode
Código PHP:
function setPrevious($node){ 
   
$this->previousNode = &$node;

Debería ser así
Código PHP:
function setPrevious(&$node){// Aquí está la diferencia. 
   
$this->previousNode = &$node;

Del mismo modo con setPrevious().

También en la clase LinkedList se referencias objetos que no lo necesitan. No debes referenciar objetos al pasarlos como parámetros en funciones o métodos.
Por ejemplo:
Código PHP:
$newNode $this->getNewNode($object);
//...
$this->head->setNext(&$newNode); 
Provocará un Warning relacionado con "Call-time pass-by-reference".

La manera de hacer esto es
Código PHP:
$newNode = &$this->getNewNode($object);// Aquí lo referencias
//...
$this->head->setNext($newNode);// Aquí ya no. $newNode ya es una referencia. 
Luego tienes que asegurarte que getNewNode() reciba ese parámetro por referencia, y que además devuelva una referencia.
Tú tienes:
Código PHP:
function getNewNode(&$object){// Aquí te estás asegurando de referenciar lo que recibes, peor no lo que devuelves.
return new ListNode(&$object);// $object ya es una referencia, no debes referenciarlo aquí. Producirá Warning

Debería ser algo así:
Código PHP:
function &getNewNode(&$object){// Ahora también referencias lo que devuelves.
$new = &new ListNode($object);// Referencias el objeto nuevo, peor no el parámetro que envías (que ya era una referencia).
return $new;

Hice los cambios necesarios y al menos el ejemplo funciona bien. Por favor, verifica que todo esté correcto.
http://nuestrophp.com/Linked_List.zip

Los cambios que hice son los mismos que te expliqué más arriba, pero en todas las líneas en donde ocurre.

Saludos
  #3 (permalink)  
Antiguo 09/07/2005, 00:29
 
Fecha de Ingreso: noviembre-2004
Mensajes: 19
Antigüedad: 19 años, 5 meses
Puntos: 0
Antes que nada te quiero agradecer por todo el tiempo que te has tomado en leer el código, sé que era recontra extenso y valoro la enorme molestia de tu parte.

MUCHAS GRACIAS

Por otro lado te agradezco el qeu me hayas liberado de la culpa de uqe no me funcione mi lista porque los errores uqe marcaste parecieran estar todos en el código que me baje (la clase padre de la que hereda mi clase SortedList :D ).


YA MISMO ME POGO A REVER TODO ESTO
__________________
I'm gonna Beta-test your girlfriend
  #4 (permalink)  
Antiguo 09/07/2005, 18:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola:
La mayor parte de los errores están en el código que bajaste, pero tú has heredado también parte de ellos (y no me refiero a que tu clase herede de LinkedList). En SortedList (tu clase) también había varios errores al pasar parámetros por referencia cuando se llamaba a un método.

Pero, como te dije, revisa bien el código porque es posible que en partes que no están contempladas en test.php siga habiendo error.

Saludos
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 15:47.