Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Cuestión Sobre Método De Una Clase.Borra El Array Original

Cuestión Sobre Método De Una Clase.Borra El Array Original
Artículo
Responder citando    Descargar mensaje  
Mensaje Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Hola Comunidad!.

Tengo una clase llamada baraja, la cual tiene un método llamado Cortar.
A este método le paso una array de cadena que contiene la baraja y el lugar por donde corto la baraja.

barajatemp1 contiene el contenido del array que se le ha pasado al método o función.
barajatemp2 es la baraja cortada que es la que devuelve el método.

Bien, hasta ahí todo correcto. Hasta ahora la aplicación me funciona dentro de lo que hice.
Mi cuestión va orientada a esto. El array que yo le paso también se "borra" y me ha
dejado un poco desconcertado, creía que era una copia (valor) con lo que trabaja y no el original.(referencia)

No es que sea un problema para la aplicación, pero si como duda.

Public Function CortarBaraja(otrabaraja As String[], lugar As Integer) As String[]

  Dim barajatemp1 As New String[]    
  Dim barajatemp2 As New String[]  
  Dim x As Integer  
  
  barajatemp1 = otrabaraja
  
  For x = lugar + 1 To barajatemp1.Count - 1
    barajatemp2.Add(barajatemp1[x])            
  Next
  barajatemp1.Remove((lugar + 1), (barajatemp1.Count - 1) - lugar)  
  For x = 0 To barajatemp1.Count - 1
    barajatemp2.Add(barajatemp1[x])      
  Next
  barajatemp1.Clear
  Return barajatemp2  
  
End
 


Creo que el problema esta en usar New.

Saludos



 
última edición por Shell el Lunes, 25 Febrero 2013, 12:17; editado 2 veces 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 25 Febrero 2013, 12:14 ]
 


Cuestión Sobre Método De Una Clase.Borra El Array Original
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Shell:
Podias poner la linea en el que llames al método y como esta definida la cadena que le pasas (con una propiedad, o public ... as string[] )


Saludos



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Lunes, 25 Febrero 2013, 12:49 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Julio:

Ok.
Esto se encuentra en el formulario principal:

Private mibaraja As New ClaseBaraja
Private aunabaraja As New String[]
Private abarajamezclada As New String[]  
Private abarajacortada As New String[]

Private mispuntos As Float

Public Sub _new()

End

Public Sub Form_Open()
    
  aunabaraja = mibaraja.CrearMazo()
  abarajamezclada = mibaraja.Barajar(aunabaraja)
  abarajacortada = mibaraja.CortarBaraja(abarajamezclada, 5)
  
  mispuntos = 0
    
End
 


Esto es en la clase Baraja:

Public obaraja As New ClaseCarta

 


Y el método ya lo conoces.

Aquí tienes la clase carta.

Private spalo As String[]
Private snomcarta As String[]
Private svalorcarta As Float[]

Property palo As String[]
Property nomcarta As String[]
Property valorcarta As Float[]



Private Function palo_Read() As String[]
  Return spalo  
End

Private Sub palo_Write(Value As String[])
  spalo = Value
End

Private Function nomcarta_Read() As String[]
  Return snomcarta  
End

Private Sub nomcarta_Write(Value As String[])
  snomcarta = Value
End

Private Function valorcarta_Read() As Float[]
  Return svalorcarta  
End

Private Sub valorcarta_Write(Value As Float[])
  svalorcarta = Value
End
 


Uso en la clase Baraja un constructor, tal que así:

Public Sub _new()
  
  obaraja.palo = ["OROS", "COPAS", "ESPADAS", "BASTOS"]
  obaraja.nomcarta = ["AS", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "SOTA", "CABALLO", "REY"]
  obaraja.valorcarta = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 0.5, 0.5, 0.5]
  
End
 


Saludos.



 
última edición por Shell el Lunes, 25 Febrero 2013, 13:04; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 25 Febrero 2013, 13:01 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Los arrays siempre se pasan por referencia. Si quieres pasar por valor utiliza el método .copy que llevan de por sí...

array2=arrayuno.copy()

o

mifuncion(miarray.copy())


Con esto último lo pasas por valor.

Saludos



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Lunes, 25 Febrero 2013, 13:08 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Gracias Shordi,

Lo intentare como cuentas.

He enviado un privado a Jesús, no tengo ni idea que habrá ocurrido.  
Pero fue muy extraño, cuando le di a enviar, algo había cambiado en la variable lugar, el tipo de esta variable se escribió mal.

Saludos.



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 25 Febrero 2013, 13:17 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Shell:

Puedes encontrar un motón de métodos interesantes para trabajar con arrays de cadenas en este enlace:

http://gambasdoc.org/help/comp/gb/string[]?es

Saludos

Nota:
En enlace copialo y pegalo completo en el navegador, ya que no sale bien en el foro



 
última edición por jsbsan el Lunes, 25 Febrero 2013, 13:24; editado 1 vez 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Lunes, 25 Febrero 2013, 13:21 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Gracias Julio.

Shordi:

Antes,Gambas2 solo pasaba por valor.Con la entrada de Gambas3 ya se pudo pasar por referencia.
Hice en su día un ejemplo en el blog, para el paso por referencia a un procedimiento.

PUBLIC SUB Form_Open()

Dim sNombre AS String

sNombre=”Jose Luis”

'Llamamos al procedimiento, pasándole como parámetro la variable sNombre

VerNombre(ByRef sNombre)

'Al salir del procedimiento ,mostramos el valor de la variable sNombre,
'comprobando que ha cambiado.

Message.info(“El valor del nombre es: “ & sNombre)

End


PUBLIC SUB VerNombre(ByRef sNom AS STRING)

'Vemos su valor original.

Message.info( “El valor original del parámetro es: “ & sNom)

'Cambiamos su valor y lo mostramos.

sNom=”Jose María”

Message.info(“El valor del parámetro se cambia a: “ & SNom)

END
 


Pero claro, se esta usando una sentencia añadida ByRef

Al final funciono como tu dijiste:
abarajamezclada = mibaraja.Barajar(aunabaraja.Copy())
 


Normal que se borrase el contenido del array.

Saludos.



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 25 Febrero 2013, 14:10 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
shordi escribió: [Ver mensaje]
Los arrays siempre se pasan por referencia.


No solo los arrays, cualquier objeto SIEMPRE es pasado por referencia, ya que el argumento (la variable pasada) es un puntero a la memoria del objeto y no el objeto en si. Es por eso que cuando el argumento es un objeto, el ByRef no es necesario.



 
sebikul - Ver perfil del usuario Enviar mensaje privado  
sebikul [ Miercoles, 27 Febrero 2013, 03:05 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Efectivamente Sebikul, más razón que un santo.



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Miercoles, 27 Febrero 2013, 05:50 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron