Ayuda con programa en JAVA

timoneyti

Bovino maduro
#1
Hola bakunos miren eh estado intentando hacer un programa en JAVA que me lea un cierto número de datos y me regrese la varianza , media y la desviacion de los elementos que ingrese, pues segun yo tengo este codigo solo que nomas no me compila y ya me desespero un poquito espero que me puedan ayudar a corregir mi error, de verdad se los agradeceria mucho..
saludos :D:D

Esta es la clase que tengo para leer los datos:





Código:
  import java.io.*;
public class   Leer
{
  public static String dato ()
  {
	InputStreamReader isr = new InputStreamReader (System.in);
	BufferedReader br = new BufferedReader(isr);
	String str = " ";
		
		try
		{
		  str = br.readLine();
		}
		
	catch (IOException e)
	{
	System.out.println("Error de I/O"+e.getMessage());
	}
	return str;
   }


	public static int datoInt()
	{
		try{
			return Integer.parseInt(dato( ));
		   }
		catch (NumberFormatException e)
		{
		return Integer.MIN_VALUE;
		}
	}	
	public static double datoDouble( )
	{
		try{
			return Double.parseDouble(dato( ));
		   }
		catch (NumberFormatException e)
		{
		return Integer.MIN_VALUE;
		}
	}
	
	public static char datochar( )
	{
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		char c = '\0'; //nulo
			try
			{		
			c = (char) br.read();
			}
			catch (IOException e)
			{
			System.out.println("Error de I/O. "+e.getMessage());
			}
		return c;
	}	
  }






Esta otra clase contiene las funciones para obtener los calculos del arreglo:

Código:
 public class Estadistica
{
	int n;
	double x,var,desv;
	double datos[ ];
	
	public Estadistica (int n)
	{
		this.n = n;
		datos = new double [n];//Crea el objeto
	}
	
	public double media ( )
	{
		x=0;
		 for (int i=0; i<n; i++)
			x= x + datos[i];
			x=x/n;
		return x;
	}
	
	//pra la varianza
	public double varianza ( )
	{
		var=0;
		for (int i=0; i<n; i++)
		var = var + Math.pow(x-datos[i],2);
		var = var/(n-1);
		return var;
	}
	
	public double desviacion ( )
	{
		return Math.sqrt(var);
	}
	
		public static void leervector (double datos[])
	{
		for (int i=0; i<datos.length; i++)
		{
			System.out.print("Elemento "+(i+1)+":");
			datos[i]=Leer.datoDouble( );
		}
	}
}






Y por ultimo esta la clase que contiene el programa principal:


Código:
 public class AplEstadistica
{
	public static void main (String args[])
	{
	int n  ;
	System.out.println("Ingrese el limite de datos:  (n) ");
	n = Leer.datoInt ();
     
	 Estadistica datos01 = new Estadistica(n);
	 //datos01.leervector(datos01);
	 datos01.leervector(datos01);
	 
	 
	 {
	 System.out.println(" varianza:"+datos01.varianza());
	  System.out.println(" media:"+datos01.media());
	   System.out.println(" desviacion:"+datos01.desviacion());
	  }   
	 
	
	}
}


Aqui esta lo que me arroja el compilador

 

malvadomx

Bovino maduro
#5
Estas creando un objecto tipo Estadistica, al cual en el constructor le pasas los datos que leiste, hasta ahí está bien, pero despues, mandas llamar un metodo de ese mismo objecto, mandandole el objecto como parametro, creo que eso no está bien, además de que el metodo espera un array de double, mas no un objecto tipo Estadistica.

Quiza en el constructor deberías de hacer esto:

Código:
public Estadistica (int n)
	{
		this.n = n;
		datos = new double [n];//Crea el objeto
                leervector(datos)
	}
no he programado java desde hace mucho tiempo, no recuerdo si ocupas algo mas para mandar llamar un metodo de si mismo, si no te funciona pues ve como, pero en si, el metodo leervector espera un array de double, y no un objeto tipo Estadistica.
 

timoneyti

Bovino maduro
#6
Estas creando un objecto tipo Estadistica, al cual en el constructor le pasas los datos que leiste, hasta ahí está bien, pero despues, mandas llamar un metodo de ese mismo objecto, mandandole el objecto como parametro, creo que eso no está bien, además de que el metodo espera un array de double, mas no un objecto tipo Estadistica.

Quiza en el constructor deberías de hacer esto:

Código:
public Estadistica (int n)
	{
		this.n = n;
		datos = new double [n];//Crea el objeto
                leervector(datos)
	}
no he programado java desde hace mucho tiempo, no recuerdo si ocupas algo mas para mandar llamar un metodo de si mismo, si no te funciona pues ve como, pero en si, el metodo leervector espera un array de double, y no un objeto tipo Estadistica.


Oye de verdad muchas gracias, no se me había ocurrido eso de agregar el método de leer directamente al constructor, disculpa pero apenas ando aprendiendo JAVA.

al final el programa jalo a la perfección ahí les dejo el código por si a alguien le es útil:

Esta es la clase para leer



Código:
import java.io.*;
public class   Leer
{
  public static String dato ()
  {
	InputStreamReader isr = new InputStreamReader (System.in);
	BufferedReader br = new BufferedReader(isr);
	String str = " ";
		
		try
		{
		  str = br.readLine();
		}
		
	catch (IOException e)
	{
	System.out.println("Error de I/O"+e.getMessage());
	}
	return str;
   }


	public static int datoInt()
	{
		try{
			return Integer.parseInt(dato( ));
		   }
		catch (NumberFormatException e)
		{
		return Integer.MIN_VALUE;
		}
	}	
	public static double datoDouble( )
	{
		try{
			return Double.parseDouble(dato( ));
		   }
		catch (NumberFormatException e)
		{
		return Integer.MIN_VALUE;
		}
	}
	
	public static char datochar( )
	{
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		char c = '\0'; //nulo
			try
			{		
			c = (char) br.read();
			}
			catch (IOException e)
			{
			System.out.println("Error de I/O. "+e.getMessage());
			}
		return c;
	}	
  
	 public static void vector (int v[ ])
	{
		for (int i=0; i<v.length; i++)
		{
			System.out.print("Elemento "+(i+1)+":");
			v[i]=datoInt( );
		}
	} 
	
     public static void vectorDouble (double v[ ])
	{
		for (int i=0; i<v.length; i++)
		 {
		  System.out.print("Elemento "+(i+1)+":");
		  v[i]=datoDouble( );
		 }
	} 
	
	//para la matriz
	public static void matriz (int m[ ][ ])
	{
	   for(int i=0; i<m.length;i++)
	     for(int j=0; j<m[i].length;j++)
		 {
			System.out.print("Elemento "+(i+1)+","+(j+1)+" :");
			m[i][j]=datoInt( );
		 }
	}	 
	
	public static void matriz (double m[ ][ ])
	{
	   for(int i=0; i<m.length;i++)
	     for(int j=0; j<m[i].length;j++)
		 {
			System.out.print("Elemento "+(i+1)+","+(j+1)+" :");
			m[i][j]=datoDouble( );
		 }
	}
 
}



Clase para los cálculos estadisticos:

Código:
public class Estadistica
{
	int n;
	double x,var,desv;
	double datos[ ];
	
	public Estadistica (int n)
	{
		this.n = n;
		datos = new double [n];//Crea el objeto
		Leer.vectorDouble(datos);
	}
	
	public double media ( )
	{
		x=0;
		 for (int i=0; i<n; i++)
			x= x + datos[i];
			x=x/n;
		return x;
	}
	
	//pra la varianza
	public double varianza ( )
	{
		var=0;
		for (int i=0; i<n; i++)
		var = var + Math.pow(x-datos[i],2);
		var = var/(n-1);
		return var;
	}
	
	public double desviacion ( )
	{
		return Math.sqrt(var);
	}
}


Finalmente la clase para el programa principal:

Código:
public class AplEstadistica
{
	public static void main (String args[])
	{
	int n  ;
	double datos[ ];
	System.out.println("Ingrese el limite de datos:  (n) ");
	n = Leer.datoInt ();
     
		Estadistica D1 = new Estadistica (n);
	 
	 //Leer.vectorDouble(datos);
 
	 
	 
	 
	 System.out.println(" varianza:"+D1.varianza());
	  System.out.println(" media:"+D1.media());
	   System.out.println(" desviacion:"+D1.desviacion());
	  }
}
 
#7
a ver xD
tienes un revoltijo medio raro ahi te voy a explicar rapido que estas haciendo mal

Tu clase estadistica ya tiene atributos del numero de elementos con que va a trabajar y el vector para guardarlos

el metodo 'leervector' pide como argumento un arreglo de doubles que llena con datos desde la consola pero no guarda su referencia(los metodos para calcular media y etc no tienen manera de accesar lo que leyo)

leervector deberia llenar el arreglo dentro de la misma clase y no pedir otro arreglo como argumento

dicho eso el error de compilacion que te manda es que estas tratando de pasar como argumento un objeto de tu clase Estadistica como argumento arreglo de doubles para el metodo leervector
 
Arriba