Java - Obtener el indice de un arreglo

 
Vista:
sin imagen de perfil
Val: 18
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Obtener el indice de un arreglo

Publicado por Morgar (10 intervenciones) el 04/04/2019 04:56:26
Lo que pasa que estoy intentando sacar un dato "get" de un arreglo sin embargo no entiendo aun muy bien como obtener el indice de un dato y el error me lo marca de tal forma que ya le di vueltas al asunto pero la unica forma que encontré como hacerlo para mi no es lo que espero:

1
2
3
4
5
6
7
private int obtenIndiceCuenta(String cuenta)
{
    for(int i=0;i<cuentasTod;i++)
        if(cuenta.equals(cuentasG[i].getNumero()))
            return i;
    return -1;
}

Si alguien sabe el porque no me acepta el atraer el get desde cuentanormal se lo agradecería.
Como se darán cuenta abajo, no necesito "numero" en cuentasSTarjeta, por eso no lo pido en la clase cuenta.

Sin-titulo
Sin-titulo2
Sin-titulo3
Sin-titulo4
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Obtener el indice de un arreglo

Publicado por Kabuto (1381 intervenciones) el 04/04/2019 20:52:17
Hola.

Creo entender que el método getNumero() solo está definido para la clase CuentaNormal

¿Correcto?

Bien, por otra parte, en el array cuentasG puedes almacenar objetos de la clase CuentaNormal y también de la clase CuentaSinTarjeta.

Esto significa que ese array estará declarado para almacenar objetos instanciados como clase Cuenta, que es la clase "padre" de las dos anteriores.
Es decir, el array estaría declarado algo así como esto:
1
Cuenta[] cuentasG = new Cuenta[8];

¿Correcto?

Bien, si esto es así, aquí es donde se te presenta el problema.
Tú en ese array tienes objetos de dos clases "hermanas", instanciadas "a nombre de su clase padre" para poder tenerlas juntas en un solo array.

Esto en sí no tiene nada de malo, todo lo contrario, es una de las ventajas del Polimorfismo.
Pero hay que tener en cuenta que teniendo los objetos en ese estado, es decir, instanciados como su clase padre, no vas a poder llamar a métodos que son específicos de las clases hijas.

Es decir, el método getNumero() no pertenece a la clase Cuenta, por eso no vas a poder utilizarlo mientras los objetos estén como Cuenta.

Lo que tienes que hacer es, dentro del bucle, preguntar por cada objeto si originalmente fue instanciado como CuentaNormal, y en caso afirmativo, has de convertir ese objeto de Cuenta a CuentaNormal, y ahora sí, poder llamar al método que te interesa.

Algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
private int obtenIndiceCuenta(String cuenta)
{
    for(int i=0;i<cuentasTod;i++)
    {
        if (cuentasG[i] instanceof CuentaNormal)
        {
            CuentaNormal cn = (CuentaNormal) cuentasG[i]; //Pasamos de Cuenta a CuentaNormal
            if(cuenta.equals(cn.getNumero()))
                return i;
        }
    }
    return -1;
}

No lo he probado, pero creo que está bien escrito. Pruébalo y nos cuentas.
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
sin imagen de perfil
Val: 18
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Obtener el indice de un arreglo

Publicado por Luis Enrique (10 intervenciones) el 05/04/2019 01:04:14
No, al final simplemente es como si no hubiese hecho ese movimiento, pero creo que sera mas facil mover "numero" a "Cuenta" y asi me evito de problemas.
De cualquier manera muchas gracias por tu ayuda.
Saludos y suerte. :)
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