Ver Mensaje Individual
  #7 (permalink)  
Antiguo 10/06/2010, 12:13
buckcherry
 
Fecha de Ingreso: diciembre-2008
Mensajes: 13
Antigüedad: 15 años, 4 meses
Puntos: 0
Fe de Erratas: Ayuda con búsquedas en Arraylist - Visual Basic 2005

Cita:
Iniciado por buckcherry Ver Mensaje
Asumiendo que soy un principiante, basandome en lo que creo saber...
Count no cuenta a partir de 0, sino de 1...

Si en el array hay dos valores, count da como resultado 2
Si recorro el array con Count - 1 no me encuentra el valor que está en la última posición.

...pero me has ayudado mucho , porque me he dado cuenta que cuando el array está vacío Count da como resultado 0

Por lo que, ahora si:

Private Function buscarempleado(ByRef arrayempleados As ArrayList) As Integer
Dim cache As String 'Creamos una variable tipo String para guardar el nombre a buscar
Dim i As Integer 'Creamos una variable contador

cache = InputBox("Escriba el nombre del empleado que desea buscar", "Búsqueda") 'Pedimos el nombre a buscar, y lo guardamos en memoria.
If arrayempleados.Count() <> 0 Then 'Si el arraylist no está vacío
For i = 0 To arrayempleados.Count 'Recorremos el array
If arrayempleados(i).nombre = cache Then 'Si hay una coincidencia
Return i 'Devolvemos donde está ubicada
Else
MessageBox.Show("Empleado no encontrado.", "No encontrado") 'Si no lo encontramos...
Return -1 'devolvemos un -1
End If
Next
Else 'Si el arraylist está vacío
Return -1 'Devolvemos -1
MessageBox.Show("Empleado no encontrado.", "No encontrado") '...y sacamos mensaje por pantalla.
End If
End Function

Esto ya funciona.
Gracias de nuevo a todos, y en particular a David
Tenías razón, David, y yo te la di sin dartela .
Count cuenta a partir de 1, con lo que hay que restarselo para que se iguale con el índice...
Por otra parte, había metido un Else dentro del bucle que lo frenaba.
El código definitivo es este:

Private Function buscarempleado(ByRef arrayempleados As ArrayList) As Integer
Dim cache As String 'Creamos una variable tipo String para guardar el nombre a buscar
Dim i As Integer 'Creamos una variable contador
If arrayempleados.Count <> 0 Then 'Si el arraylist no está vacío
cache = InputBox("Escriba el nombre del empleado que desea buscar", "Búsqueda") 'Pedimos el nombre a buscar, y lo guardamos en memoria.

For i = 0 To arrayempleados.Count - 1 'Recorremos el array
If arrayempleados(i).nombre = cache Then 'Si hay una coincidencia
Return i 'Devolvemos donde está ubicada
End If
Next
MessageBox.Show("Empleado no encontrado.", "No encontrado") 'Si no lo encontramos...
Return -1 'devolvemos un -1
Else 'Si el arraylist está vacío
MessageBox.Show("No hay empleados.", "Error") '...y sacamos mensaje por pantalla.
Return -1 'Devolvemos -1
End If
End Function