Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: miguelmaxs en 24 de Febrero 2021, 10:14

Título: Validar datos en Java crear método que reciba array o arreglo y realice suma
Publicado por: miguelmaxs en 24 de Febrero 2021, 10:14
Primero que todo hola a todos y gracias por leer. Lo que pasa es que estoy aprendiendo a programar con java y pues estoy comenzando (estoy a nivel de POO herencia e interfaces).

Estoy creando una clase que se llama Validaciones donde tengo métodos para validar datos. Así me ahorro código ya que en muchos ejercicios me piden que cree un array de objetos y que luego sume algun metodo del objeto del array o saque una media , o muestre algun metodo, asi que estoy intentando crear un método en mi clase validaciones para eso pero no sé cómo hacerlo. Esto sería un ejemplo de lo que quiero

Código: [Seleccionar]
public double genericoSumaArray (Object[] x , (aqui quiero poner x.getsueldo o algo asi)) {
      double cont=0;
      for (int fila=0;fila>x.length;fila++)
         cont=x[fila].(aqui quiero poner el getsueldo )+cont;
      return cont;
   }
Título: Re: Ayuda con JAVA = Como crear un metodo java que reciba....
Publicado por: Kabuto en 25 de Febrero 2021, 01:24
Mmmhh, creo que te entiendo, pero me temo que no es posible. O yo al menos desconozco como hacerlo.

Tu idea es poder usar un método que reciba un array de clase Object, para poder aplicarlo a cualquier clase: Alumno, Comercial, Persona, Vehiculo,... ya que todos son hijos de Object.

Pero además, hacerle pasar también de algún modo el nombre del método que se ha de usar.
Si quieres sumar edades:
public double genericoSumaArray (Object[] x, getEdad() );
Si quieres sumar sueldos:
public double genericoSumaArray (Object[] x, getSueldo() );
Si quieres sumar el peso de una flota de Camiones:
public double genericoSumaArray (Object[] x, getPeso() );

Etc...

Bien, como idea, es genial... pero que yo sepa, no es posible.

De todos modos, respecto a sumar, siempre son valores int, o double, o float.
Son tipos primitivos, pero que tienen su equivalente en clase POO
int -> Integer
double - Double
float  -> Float

Así que puedes hacer que tu método genérico reciba simplemente el array Object, compruebe a que tipo de "instancia" pertenecen, castear el array a la clase  correspondiente y hacerla suma.

Este método te sirve para sumar enteros, dobles o float

Código: [Seleccionar]
public double genericoSumaArray (Object[] x) {
double suma = 0;

if (x instanceof Integer[]) {
Integer[] enteros = (Integer[]) x;
for (Integer numInt: enteros)
suma = suma + numInt;
}
else if (x instanceof Float[]) {
Float[] flotantes = (Float[]) x;
for (Float numFlo: flotantes)
suma = suma + numFlo;
}
else if (x instanceof Double[]) {
Double[] dobles = (Double[]) x;
for (Double numDob: dobles)
suma = suma + numDob;
}

return suma;
}

Así si por ejemplo quieres sumar calificaciones, pues en lugar de hacerle llegar un array de Alumno[], construyes un array de Float[] con las calificaciones.

O un Float[] con salarios, o un Integer[] con entradas de cine vendidas, o lo que sea que puedas necesitar.