martes, 8 de mayo de 2012

Clase Suma en Java


Bienvenido a Java Curso Avanzado.  En esta publicación aprenderás:
Como elaborar una clase de un proceso de suma para números enteros y double.

Problema a resolver: Se sabe que un proceso puede realizarse en una sola sentencia. Pero que pasa si el proceso es mas complejo de lo que parece, ejemplo de este caso es la suma de números.

¿Cómo elaborar esta clase para cumpla con los requerimientos para funcionar en cualquier caso?
Lo primero que tenemos que hacer es establecer que métodos podemos utilizar en un caso de suma.

Los casos son los siguientes:

  1. -Sumar 2 números enteros dados por el usuario.
  2. -Sumar 10 números enteros dados por el usuario.
  3. -Sumar 2 números decimales dados por el usuario.
  4. -Sumar 10 números decimales dados por el usuario.

Lo primero que pensaría una persona es resolver el caso dentro del mismo método del Main.
A continuación se muestra lo que no se debe hacer en la suma.

public static void main(String[] args) {
        int numero1=5;
        int numero2=7;
        int resultado=numero1+numero2;
        System.out.println("Resultado: "+resultado);
    }

En el caso anterior solo resuelve el primer punto.


public static void main(String[] args) {
        double numero1=5.4;
        double numero2=7.3;
        double resultado=numero1+numero2;
        System.out.println("Resultado: "+resultado);
    }

En el caso anterior solo resuelve el tercer punto.



Entonces los puntos dos y tres tampoco se resuelven igual o agregando un ciclo.
Lo que se tiene que hacer es crear una clase en la cual se puede resolver cualquier caso.
Esto es para que el código no se modifique y en caso de hacerlo solo se modifique en un lugar y no en varios lugares.

La clase deberá quedar así.


/*
 * Autor: Hugo Muñoz García
 * Version: 1.0
 * Fecha: 08/05/2012
 * Tema: Clase Suma
 */
public class Suma {
    //Atributos para variables tipo int
    private double[] dOperadores;
    private double dResultado=0;

    //Atributos para variables tipo double
    private int[] iOperadores;
    private int iResultado=0;
    
    /*Constructor para variable int[]*/
    public Suma (int[] numeros){
        this.iOperadores=numeros;
    }
    /*Constructor para variable Double[]*/
    public Suma (double[] numeros){
        this.dOperadores=numeros;
    }
    /*Obtener el resultado en int*/
    public int getResultadoInt(){
        this.iResultado=getResultadoSumaInt();
        return this.iResultado;
    }
    /*Obtener el resultado en Double*/
    public double getResultadoDouble(){
        this.dResultado=getResultadoSumaDouble();
        return this.dResultado;
    }
    private int getResultadoSumaInt(){
        for (int i=0;i<this.iOperadores.length;i++){
            this.iResultado+=this.iOperadores[i];
        }
        return this.iResultado;
    }
    private double getResultadoSumaDouble(){
        for (int i=0;i<this.dOperadores.length;i++){
            this.dResultado+=this.dOperadores[i];
        }
        return this.dResultado;
    }
    /*Obtiene un numero de una posición de una matriz*/
    public int getOperador(int[] operadores, int posicion){
        return operadores[posicion];
    }
}


En el método Main solo se hace lo siguiente en caso de ser enteros para dar como resultado 14.
public static void main(String[] args) {
        int[] numeros={2,3,4,5};//En vez de esto capturamos cada numero en una matriz
        //tipo int
        Suma suma=new Suma(numeros);//Creamos la clase y le asignamos la matriz
       
        System.out.println("Resultado: "+suma.getResultadoInt());
    }



En el método Main solo se hace lo siguiente en caso de ser decimales para dar como resultado 14.8.
public static void main(String[] args) {
        double[] numeros={2.2,3.2,4.2,5.2};//En vez de esto capturamos cada numero en una 
        //matriz tipo double
        Suma suma=new Suma(numeros);//Creamos la clase y le asignamos la matriz
       
        System.out.println("Resultado: "+suma.getResultadoDouble());
    }

Si deseas descargar el código es el siguiente. Descarga del servidor de preferencia.












No hay comentarios:

Publicar un comentario