Foros del Web » Programación para mayores de 30 ;) » Java »

accesar a elementos de arreglo de objetos

Estas en el tema de accesar a elementos de arreglo de objetos en el foro de Java en Foros del Web. Buen día. Recién comienzo con este lenguaje de programación, pero como que no se me da. Necesito accesar a los elementos de un arreglo de ...
  #1 (permalink)  
Antiguo 01/12/2010, 12:48
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
accesar a elementos de arreglo de objetos

Buen día.

Recién comienzo con este lenguaje de programación, pero como que no se me da.

Necesito accesar a los elementos de un arreglo de objetos para poder realizar operaciones con ellos.

Tengo un arreglo de objetos llamado grupo el cual contiene tres calificaciones: Matematicas (mat), Español (esp) y Formacion (fce), las cuales obtengo desde teclado.

Primero debo hacer promedio por alumno (eso ya me sale), esto es (mat+esp+fce)/3, epro el problema es cuando tengo que hacer el promedio por materia.

va el código de lo que llevo:

Código:
class grupo{

	//instancias
	int mat;
	int esp;
	int fce;
	double prom;

	//constructor
	public grupo(int m, int e, int f){

		mat=m;
		esp=e;
		fce=f;
	
	}

	public void asignar(int m, int e, int f){

		mat=m;
		esp=e;
		fce=f;
		
	}

	//metodo
	public void mostrar(){

	
		System.out.println(" ");
		System.out.println("Matematicas: "+mat);
		System.out.println("Espa&ol: "+esp);
		System.out.println("Formacion: "+fce);
		System.out.println(" ");
		
		double prom=(mat+esp+fce)/3;
		System.out.println(" ");
		System.out.println("Promedio: "+prom);
		System.out.println(" ");
	


	}

}
Y mi otra clase o subclase:
Código:
class dgrupo{


		public static void main (String args[]){

		grupo x[] = new grupo[3];

		int m;
		int e;
		int f;
		
			
			for(int j=0; j< 3; j++) {
				 x[j]= new grupo(0,0,0);
				System.out.println("Matematicas");
				m=Leer.datoInt();
				System.out.println("Espa&ol");
				e=Leer.datoInt();
				System.out.println("Formacion");
				f=Leer.datoInt();
				 x[j].asignar(m,e,f);
				x[j].mostrar();
				
			}
	

		}	
		
}
Espero me haya explicado en lo que necesito, he tratado de sumar sólo las variables, por ejemplo, obtener solo las calificaciones de matematicas a la hora de capturar pero, sólo obtengo el primer valor que haya ingresado para esta calificacion.

Gracias por su tiempo y respuestas. :)
  #2 (permalink)  
Antiguo 02/12/2010, 14:24
 
Fecha de Ingreso: octubre-2010
Mensajes: 46
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: accesar a elementos de arreglo de objetos

Hola que tal, amm no entiendo bien el por que haces un arreglo de 3 elementos. es suficiente con hacer un arreglo de objetos y acceder a las variables declaradas dentro del mismo objeto. Me explico. Tienes tu clase grupo, con las variables mat, esp fce y prom, es mas facil manejar estos datos con los metodos getter an setter de cada variable, y te ahorrarias el crear un nuevo arreglo, en tu caso de tres elementos, ya que solo bastaria con acceder a cada valor dentro del arreglo de objetos al momento de sacar tu promedio de materias.

Aqui va un ejemplo:

Si tienen un arreglo, en tu caso de grupos

grupos [] alumnos=new grupos[5];//5 es un ejemplo, puede ser n

cada elemento dentro de este arreglo contendra las 4 variables que creaste, ademas de los metodos de la clase, pero hay que inicializarlo, para eso esta el cosntructor por default
for(int f=0;f<5;f++)
{
alumnos[f]=new grupos();
}
Con esto, acabamos de finalizar la inicialización de nuestro arreglo, quedando asi

alumnos[0] contiene mat,esp,form y promedio
alumnos[1] contiene mat,esp,form y promedio
...
alumnos[n] contiene mat,esp,form y promedio

Para darle una calificacion a un alumno, basta con especificar que alumno es y que tipo de calificacion es, aqui entran los getter and setter.

alumno[2].setMat(10);

en tu codigo no esta clase, pero la puedes colocar de la siguiente manera

public void setMat(int mat)
{
this.mat =mat;
}

Suponiendo que ya llenaste todos tus alumnos con calificaciones(supongamos) que para mate son:

10
4
6
8
9

Para sacar el promedio por materia, solo accede al valor con el metodo get y especificando el numero de alumno.

int mat=alumno[4]=getMat();
esto te dara en automatico la calificacion del alumno 4(considerando que hay alumno 0) de matematicas, solo lo colocas dentro de un form, suma sy divides entre 5 y ya esta.

Espero me hayas entendido, te dejo el codigo de tu programa, espero te ayude y cualquier duda avisame !!


import javax.swing.JOptionPane;

public class calificaciones {
int matematicas;
int español;
int formacion;
double promedio;

public int getEspañol() {
return español;
}

public void setEspañol(int español) {
this.español = español;
}

public int getFormacion() {
return formacion;
}

public void setFormacion(int formacion) {
this.formacion = formacion;
}

public int getMatematicas() {
return matematicas;
}

public void setMatematicas(int matematicas) {
this.matematicas = matematicas;
}

public double getPromedio() {
return promedio;
}

public void setPromedio(int a,int b,int c) {
this.promedio = (a+b+c)/3;
}

public static void main(String[] args) {

String calificacion="";
int numeroalumnos=0;
int matematicas=0;
int español=0;
int formacion=0;
double promedioMatematicas=0;
double promedioEspañol=0;
double promedioFormacion=0;

//obtenemos el numero de alumnos

numeroalumnos=Integer.parseInt(JOptionPane.showInp utDialog("Ingrese el total de alumnos: "));

//creando un arrreglo de objetos, dependiendo del numero de alumnos que quieras

calificaciones [] alumnos=new calificaciones[numeroalumnos];
//aqui inicializamos cada alumno
for(int x=0;x<numeroalumnos;x++)
{
alumnos[x]=new calificaciones();
}

//asignamos calificaciones a los n alumnos

for(int x=0;x<numeroalumnos;x++)
{
//asignamos calificacion de matematicas
calificacion = JOptionPane.showInputDialog("Ingrese la calificacion de de matematicas para el alumno: "+(x+1));
alumnos[x].setMatematicas(Integer.parseInt(calificacion));
//asignamos calificaciion de español
calificacion = JOptionPane.showInputDialog("Ingrese la calificacion de de español para el alumno: "+(x+1));
alumnos[x].setEspañol(Integer.parseInt(calificacion));
//asignamos calificaciion de formacion
calificacion = JOptionPane.showInputDialog("Ingrese la calificacion de de formacion para el alumno: "+(x+1));
alumnos[x].setFormacion(Integer.parseInt(calificacion));
//asignamos promedio
alumnos[x].setPromedio(alumnos[x].getMatematicas(), alumnos[x].getEspañol(), alumnos[x].getFormacion());
}
//para sacar el promedio por materia
for(int x=0;x<numeroalumnos;x++)
{
//incrementamos el contador de cada materia, obteniendo el valor del arreglo dependiendo del alumno
matematicas=matematicas+alumnos[x].getMatematicas();
español=español+alumnos[x].getEspañol();
formacion=formacion+alumnos[x].getFormacion();
}
//finalmente, sacamos el promedio
promedioMatematicas=matematicas/numeroalumnos;
promedioEspañol=español/numeroalumnos;
promedioFormacion=formacion/numeroalumnos;

//finalmente mostramos los promedios

JOptionPane.showMessageDialog(
null, "Matematicas: " + promedioMatematicas+"\nEspañol: "+promedioEspañol+"\nFormacion: "+promedioFormacion , "Promedios",JOptionPane.PLAIN_MESSAGE);
}

}

Saludos !!
  #3 (permalink)  
Antiguo 03/12/2010, 11:41
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: accesar a elementos de arreglo de objetos

Gracias por toamrte la molestia en contestar RyoAkiyama

Estoy estudiando tu código para ver como soluciono el problema.

De verdad, gracias
  #4 (permalink)  
Antiguo 19/07/2011, 13:44
Avatar de lujan29  
Fecha de Ingreso: julio-2011
Ubicación: Hermosillo
Mensajes: 1
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: accesar a elementos de arreglo de objetos

De fabor les solicito la modificacion de este codigo nesesito asignarle los ciguientes campos a este reporte de cliente calle,colonia,poblacion,estado,RFC,Zona
espero y me puedan ayudar.





Public Sub Main()

' Colocamos los datos del rango
ParamData.ParametrosRequeridos "Clientes por clave", "Cliente inicial", "Clientes por clave", "Cliente final"

' Mostramos la ventana de rangos
Rangos Ambiente, False

' Si se presiono el boton cancelado detenemos la operación
if Cancelado Then
Exit Sub
end if

Reporte.Titulo = "Catálogo de clientes generico"

if Not ParamData.Todos1 Then
cCondicion = " AND clients.cliente >= '" & ParamData.BusquedaIni & "' AND clients.cliente <= '" & ParamData.busquedaFin & "'"
Reporte.Titulo2 = "Clientes entre el siguiente rango " & Trim(ParamData.BusquedaIni) & " - " & Trim(ParamData.BusquedaFin)
End if

IniciaDocumento()
strSQL = ""
strSQL = strSQL & "SELECT "
strSQL = strSQL & "clients.cliente, "
strSQL = strSQL & "clients.nombre, "
strSQL = strSQL & "clients.telefono "
strSQL = strSQL & "FROM clients "
strSQL = strSQL & "WHERE clients.cliente <> 'SYS' "
strSQL = strSQL & cCondicion
strSQL = strSQL & "ORDER BY clients.cliente "
Reporte.SQL = strSQL
Reporte.RetrieveColumns
Reporte.Columns("cliente").Titulo = "CLIENTE"

Reporte.Columns("nombre").Titulo = "NOMBRE DE CLIENTE"
Reporte.Columns("nombre").Ancho = 35


Reporte.Columns("telefono").Titulo = "TELÉFONO"
Reporte.ImprimeReporte
FinDocumento()

End Sub

Etiquetas: accesar, elementos, objetos, arreglos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:14.