Resultados 1 al 4 de 4

Problema Programacion Java

  1. #1 Problema Programacion Java 
    Iniciado
    Fecha de ingreso
    Feb 2009
    Mensajes
    3
    Descargas
    0
    Uploads
    0
    Hola a todos.

    Ante todo daros las gracias por la ayuda que me podais proporcionar.
    Os comento mi problema:

    Tengo que hacer una aplicacion en java que sea capaz de leer un archivo .txt con numeros separados por ";" tal que asi:

    565;
    485;
    7846;
    454;

    Y de esos numeros saque la media y la desviacion estandar.

    Ya he creado una aplicacion, pero esta me reporta 2 fallos al intentar compilarla, y ahi es donde necesito su ayuda.

    Les adjunto mi código:
    import java.io.*;
    import java.util.ArrayList;
    class Estad1
    {

    public static void main(String arg[ ]) throws IOException
    {
    ArrayList<Double> lista = new ArrayList<Double>();
    try {
    FileReader file = new
    FileReader("read.txt");
    BufferedReader buff = new
    BufferedReader(file);
    boolean eof = false;
    while (!eof) {
    String line = buff.readLine();
    if (line == null) eof = true;
    else{
    line = line.split(";")[0];
    lista.add(Double.parseDouble(line));
    }
    }
    buff.close();
    } catch (IOException e) {
    System.out.println("Error -- " +e.toString());
    }

    Object numbers[] = lista.toArray();


    System.out.println("\n Resultados \n");

    double aux_media = media(numbers);
    System.out.println(" media : " + aux_media);

    double aux_var = varianza(numbers,aux_media);
    System.out.println(" varianza : " + aux_var);
    System.out.println(" desv. estandar : " + Math.sqrt(aux_var));
    }


    public static double media(int arr[ ])
    {
    double sum = 0.0;

    for(int i = 0; i < arr.length ; i++)
    {
    sum += arr[i];
    }

    return sum / arr.length;
    }

    public static double varianza(int arr[ ], double media)
    {
    double sum = 0.0;

    for(int i = 0; i < arr.length ; i++)
    {
    sum += Math.pow(arr[i] - media, 2);
    }

    return sum / (arr.length - 1);
    }

    }
    Y el error que me reporta al intentar compilarlo es:
    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method media(int[]) in the type Estad1 is not applicable for the arguments (Object[])
    The method varianza(int[], double) in the type Estad1 is not applicable for the arguments (Object[], double)

    at Estad1.main(Estad1.java:33)
    Espero que puedan ayudarme. Muchas gracias a todos.
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Buenas! Te da error porque las funciones "media" y "varianza" reciben un parámetro de tipo "int[]", que es un array de números, y lo que realmente le estás pasando es un array de tipo Objet (Object[]), el cual contiene referencias a objetos, que tu das por supuesto que van a ser de tipo "Double", pero esto Java no lo sabe...

    Por tanto necesitas indicar que el array contiene Objetos (o referencias) y segundo asegurarte que esas referencias que contiene el array de Objetos, son objetos de tipo Double.

    La forma de conseguir ésto (tal y como lo tienes planteado con un array de objetos), es usar las clases que encapsulan tipos de datos simples (en tu caso, la clase Double. Nota la mayúscula inicial de Double).

    Por tanto el código corregido es el siguiente:

    (He puesto en negrita los cambios, y en verde los comentarios)

    import java.io.*;
    import java.util.ArrayList;
    class Estad1
    {

    public static void main(String arg[ ]) throws IOException
    {
    ArrayList<Double> lista = new ArrayList<Double>();
    try {
    FileReader file = new
    FileReader("read.txt");
    BufferedReader buff = new
    BufferedReader(file);
    boolean eof = false;
    while (!eof) {
    String line = buff.readLine();
    if (line == null) eof = true;
    else{
    line = line.split(";")[0];

    Double d = new Double(Double.parseDouble(line)); //Creas un objeto de tipo Double, que contiene el número indicado en el fichero "read.txt"
    lista.add(d); //y lo añades a la lista

    }
    }
    buff.close();
    } catch (IOException e) {
    System.out.println("Error -- " +e.toString());
    }

    Object numbers[] = lista.toArray();


    System.out.println("\n Resultados \n");

    double aux_media = media(numbers);
    System.out.println(" media : " + aux_media);

    double aux_var = varianza(numbers,aux_media);
    System.out.println(" varianza : " + aux_var);
    System.out.println(" desv. estandar : " + Math.sqrt(aux_var));
    }


    public static double media(Object arr[ ])
    //Le pasas como argumento un array que contiene referencias a Objetos (y que ya estamos seguros que son Objetos de tipo Double.
    {
    double sum = 0.0;

    for(int i = 0; i < arr.length ; i++)
    {
    sum += ((Double)arr[i]).doubleValue(); //Usas este método de la clase Double para obtener el valor encapsulado por el objeto de tipo Double. Para ello es necesario hacer un casting a (Double) ya que con esto indicas que un Objeto cualquiera va a ser tratado como un Double.
    }

    return sum / arr.length;
    }

    public static double varianza(Object arr[ ], double media) //Lo mismo con esta función
    {
    double sum = 0.0;

    for(int i = 0; i < arr.length ; i++)
    {
    sum += Math.pow((((Double)arr[i]).doubleValue()) - media, 2); //idem
    }

    return sum / (arr.length); // array.length devuelve el número de elementos del array por lo que no es necesario restarle 1.
    }

    }
    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Feb 2009
    Mensajes
    3
    Descargas
    0
    Uploads
    0
    Vaya. No me habia dado cuenta de esos detalles. Muchas gracias por tu rapida respuesta. De verdad que me has ayudado mucho. Estoy empezando a programar y todavia cometo fallos de estos. Espero que con algo más de tiempo y dedicación pues ser yo el que esté en este fabuloso foro ayudando a otras personas como tu me has ayudado hoy a mí.

    Un saludo.
    Citar  
     

  4. #4  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Nada, para eso estamos... .

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

Temas similares

  1. Problema con aplicación que usa Java
    Por alana en el foro APLICACIONES
    Respuestas: 0
    Último mensaje: 08-06-2012, 09:55
  2. Problema .jar Java
    Por eduk15 en el foro PROGRAMACION DESKTOP
    Respuestas: 8
    Último mensaje: 05-01-2011, 02:23
  3. Problema Programacion Java
    Por Arkanimus en el foro GENERAL
    Respuestas: 6
    Último mensaje: 06-11-2010, 21:21
  4. Problema registros Java
    Por Hispasat88 en el foro GENERAL
    Respuestas: 2
    Último mensaje: 11-04-2009, 03:36
  5. Problema en java
    Por fedderico10 en el foro PROGRAMACION DESKTOP
    Respuestas: 2
    Último mensaje: 11-02-2005, 19:25

Marcadores

Marcadores