Java - Promediode un grupo de estudiantes

 
Vista:
sin imagen de perfil
Val: 19
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Promediode un grupo de estudiantes

Publicado por Gabriel (11 intervenciones) el 06/12/2018 20:19:31
ESCRIBIR UN PROGRAMA QUE PERMITA ALMACENAR EN UN ARREGLO DE 2 DIMENSIONES LAS CALIFICACIONES OBTENIDAS POR LOS ALUMNOS DEL SEGUNDO SEMESTRE GRUPO UNICO DE LA CARRERA.
EL PROGRAMA DEBE DE VISUALIZAR ESAS CALIFICACIONES Y ADEMAS OBTENER UN SEGUNDO ARREGLO QUE CONTENGA EL PROMEDIO OBTENIDO POR CADA ESTUDIANTE DEL GRUPO.
DURANTE EL SEMESTRE LOS ESTUDIANTES CURSARON 6 MATERIAS.

ARREGLO CALIFIC{
COLUMNAS [6]
RENGLONES [35]
Y POR ULTIMO CALCULAR EL PROMEDIO, ALGUIEN TIENE LA SOLUCION QUE PUEDAN AYUDARME
DEBE QUEDAR ASI

NOMBRE
JUAN

CALIFICACIONES
1O, 9, 2, 3 ,7 ,9

Y PROMEDIO
7.8
}

SOLO LLEVO ESTO Y YA NO ENTIENDO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Calif {
 
     private Scanner teclado;
    private int[][] mat;
 
    public void cargar() {
        teclado=new Scanner(System.in);
        System.out.print("Cuantas fila tiene la matriz:");
        int filas=teclado.nextInt();
        System.out.print("Cuantas columnas tiene la matriz:");
        int columnas=teclado.nextInt();
        mat=new int[filas][columnas];
        for(int f=0;f<mat.length;f++) {
            for(int c=0;c<mat[f].length;c++) {
                System.out.print("Ingrese componente:");
                mat[f][c]=teclado.nextInt();
            }
        }}
    public void llenar (int M [][], int f, int c){
        Scanner Leer = new Scanner (System.in);
        for(int i=1; i <= f; i++){
            for(int j=1; j <= c; j++){
            System.out.println("inserte pos["+i+"]["+j+"]:");
            M[i][j]= Leer.nextInt();
        }
    }}
 
    public static void mostrar (int M[][], int f, int c){
        for(int i=1; i <= f; i++){
            System.out.println();
            for(int j=1; j <= c; j++){
                System.out.print("["+M[i][j]+"]");}
        }}
 
public static void main(String[] args) {
Calif sc =new Calif();
sc.cargar();
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Promediode un grupo de estudiantes

Publicado por Kabuto (1381 intervenciones) el 07/12/2018 00:52:04
Hola.
Viendo el ejemplo de lo que ha de salir por pantalla, podemos deducir que vamos a necesitar:
- un arreglo para los nombres (tipo String)
- un arreglo 2D para las calificaciones (tipo int)
- un arreglo para los promedios (tipo double)

Así que esos podrían ser los atributos/variables globales de la clase que tenemos que desarrollar. A los cuales añadiremos también un objeto Scanner para pedir datos.

1
2
3
4
5
6
public final class Calificaciones {
 
	static Scanner teclado = new Scanner(System.in);
	static String[] nombres;
	static int[][] calificaciones;
	static double[] promedios;

En el metodo main(), lo que podemos hacer nada más empezar es preguntar al usuario cuantos alumnos va a introducir.
1
2
3
4
public static void main(String[] args) {
 
		System.out.print("¿Cuantas alumnos introducirá?: ");
		int cantidad = Integer.parseInt(teclado.nextLine());

Fíjate que he preferido leer el dato numérico, usando nextLine() que lo lee como si fuera un String y luego "parsearlo" a valor int.
Podría haberlo leído directamente con el metodo nextInt(), pero luego probablemente habría tenido problemas para pedir nombres de alumnos en dato String, porque la clase Scanner a veces hace cosas raras cuando en un mismo programa pedimos datos numéricos y Strings.

Para ahorrarnos estos problemas, lo mejor es leer siempre con nextLine() y luego parsearlo a int, a double, byte o lo que necesitemos..

Sigamos...
Con el valor que nos propocione, el usuario, ya podemos inicializar los arreglos porque ahora ya sabemos sus dimensiones.
Si por ejemplo el usuario dice que va a introducir 4 alumnos, pues:
- El arreglo de nombres tendrá longitud 4.
- El arreglo de promedios tambien será 4.
- El arreglo 2D de calificaciones será de [4][6]. 4 por la cantidad de alumnos, 6 porque el enunciado dice cada alumno ha cursado 6 materias.

1
2
3
4
//Inicializamos arrays
		nombres = new String[cantidad];
		calificaciones = new int[cantidad][6]; //Son 6 materias, asi que serán 6 calificaciones por alumno 
		promedios = new double[cantidad];

Ahora empezariamos a pedir datos.
Comenzamos con un bucle for que primero pedirá el nombre del alumno.
Luego iniciamos un segundo bucle for anidado para pedir las 6 calificaciones.
Finalizado este bucle, calculamos el promedio y lo guardamos en el arreglo correspondiente.

Para calcular el promedio, podemos usar un metodo a parte que reciba solo la fila correspondiente del arreglo 2D con las 6 calificaciones ya introducidas y devuelva el promedio calculado.

Aquí pedimos los datos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Empezamos a pedir datos
		for (int i = 0; i < cantidad; i++)
		{
			System.out.println("\n\nDatos del alumno #" + (i+1));
			//Nombre
			System.out.print("Nombre: ");
			nombres[i] = teclado.nextLine();
			//Calificaciones
			System.out.println("Introduzca ahora las 6 calificaciones...");
			for (int j = 0; j < 6; j++)
			{
				System.out.print("Calificacion #" + (j+1) + ": ");
				calificaciones[i][j] = Integer.parseInt(teclado.nextLine());
			}
			//Calculamos el promedio, pasando la fila de calificaciones al metodo
			promedios[i] = calculaPromedio(calificaciones[i]);
		}

Fíjate que pasar la fila de calificaciones del array 2D, solo uso un indice --> calificaciones[i]
De este modo, le estoy pasando la fila entera, es decir, un array de 1D
Si usara dos indices --> calificaciones[i][j] entonces solo le estaría pasando un único elemento.

Y este sería el método que calcula el promedio:
1
2
3
4
5
6
7
8
static double calculaPromedio(int[] filaCalificaciones)
	{
		int suma = 0;
		for (int i = 0; i < 6; i++)
			suma += filaCalificaciones[i];
 
		return suma / 6d;
	}


Una vez ha finalizado el bucle for principal, ya tenemos todos los arreglos con los datos correspondientes: nombres, calificaciones y promedios .

Solo quedaría presentarlos en pantalla. Esto último te lo dejo para que lo hagas tú, aunque es muy sencillo. Es casi repetir la misma estructura de bucles que hemos usado para pedir datos.

Te dejo aquí el código completo (sin la parte de mostrar datos) de una sola pieza para que lo copies, o lo mires para ayudarte a crear tu propio código, o lo que creas conveniente.
Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.Scanner;
 
public final class Calificaciones {
 
	static Scanner teclado = new Scanner(System.in);
	static String[] nombres;
	static int[][] calificaciones;
	static double[] promedios;
 
	public static void main(String[] args) {
 
		System.out.print("¿Cuantas alumnos introducirá?: ");
		int cantidad = Integer.parseInt(teclado.nextLine());
 
		//Inicializamos arrays
		nombres = new String[cantidad];
		calificaciones = new int[cantidad][6]; //Son 6 materias, asi que serán 6 calificaciones por alumno 
		promedios = new double[cantidad];
 
		//Empezamos a pedir datos
		for (int i = 0; i < cantidad; i++)
		{
			System.out.println("\n\nDatos del alumno #" + (i+1));
			//Nombre
			System.out.print("Nombre: ");
			nombres[i] = teclado.nextLine();
			//Calificaciones
			System.out.println("Introduzca ahora las 6 calificaciones...");
			for (int j = 0; j < 6; j++)
			{
				System.out.print("Calificacion #" + (j+1) + ": ");
				calificaciones[i][j] = Integer.parseInt(teclado.nextLine());
			}
			//Calculamos el promedio, pasando la fila de calificaciones al metodo
			promedios[i] = calculaPromedio(calificaciones[i]);
		}
 
		//Ya tenemos datos. Los presentamos
		/*
         * CODIGO OMITIDO
         */
 
		System.out.println("\n\n\t\tFIN DE PROGRAMA");
 
	}
 
	static double calculaPromedio(int[] filaCalificaciones)
	{
		int suma = 0;
		for (int i = 0; i < 6; i++)
			suma += filaCalificaciones[i];
 
		return suma / 6d;
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Promediode un grupo de estudiantes

Publicado por Israel (1 intervención) el 20/05/2022 05:32:40
¿Como quedaria la parte para presentar cada uno de los datos? disculpa la molestia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Promediode un grupo de estudiantes

Publicado por Billy Joel (876 intervenciones) el 07/12/2018 19:26:04
Hola no estoy seguro para que necesitan 2 arreglos (a menos que quieran el promedio general del grupo y aún así es innecesario).
Entonces yo lo que veo aquí es una clase Estudiante con las siguientes propiedades:
- Nombre
- Apellido
- Calificaciones: Un arreglo de enteros que contendrá las calificaciones de las materas.

Además le he colocado los siguientes métodos:
- setCalificacion
- getPromedio

A continuación la clase Estudiante:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public class Estudiante {
 
    private String nombre;
    private String apellido;
    private int[] calificaciones;
 
    public Estudiante() {
        nombre = "";
        apellido = "";
        calificaciones = new int[6];
        for (int i = 0; i < calificaciones.length; i++) {
            calificaciones[i] = -1;
        }
    }
 
    /**
     * Añade la calificacion en la posición del arreglo de calificaciones
     *
     * @param index indice del arreglo
     * @param calificacion calificacion de la materia
     */
    public void setCalificacion(int index, int calificacion) {
        calificaciones[index] = calificacion;
    }
 
    /**
     * Devuelve el promedio del estudiante. Si alguna de las notas del
     * estudiante no han sido seteadas entonces el promedio devolverá -1
     *
     * @return
     */
    public double getPromedio() {
        double promedio = -1;
        boolean error = false;
        int sumatoria = 0;
        for (int c : calificaciones) {
            if (c == -1) {
                error = true;
                break;
            } else {
                sumatoria += c;
            }
        }
        if (!error) {
            promedio = sumatoria / new Double(calificaciones.length);
        }
        return promedio;
    }
 
    @Override
    public String toString() {
        String s = "Nombre: " + nombre
                + "\nApellido: " + apellido
                + "\nCalificaciones: ";
        for (int i = 0; i < calificaciones.length; i++) {
            s += calificaciones[i] + (i + 1 < calificaciones.length ? ", " : "");
        }
        s += "\nPromedio: " + getPromedio();
        return s;
    }
 
    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }
 
    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    /**
     * @return the apellido
     */
    public String getApellido() {
        return apellido;
    }
 
    /**
     * @param apellido the apellido to set
     */
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }
 
    /**
     * @return the calificaciones
     */
    public int[] getCalificaciones() {
        return calificaciones;
    }
 
    /**
     * @param calificaciones the calificaciones to set
     */
    public void setCalificaciones(int[] calificaciones) {
        this.calificaciones = calificaciones;
    }
}

A esa clase le sobre escribí el método toString para mostrar los datos del estudiante en un formato que me gusta :-p

Entonces la clase principal, en ésta se encargaría de la lectura de los datos de los estudiantes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Promedios {
 
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int cantidadEstudiantes;
        do {
            //Primero leemos la cantidad de estudiantes que hay
            System.out.println("Introduzca la cantidad de estudiantes que tiene el grupo: ");
            try {
                cantidadEstudiantes = Integer.parseInt(br.readLine());
                if (cantidadEstudiantes < 1) {
                    System.out.println("Cantidad inválida\nRegresemos....");
                }
            } catch (IOException | NumberFormatException ex) {
                cantidadEstudiantes = -1;
                System.out.println("Hubo un error de lectura\nRegresemos...");
            }
        } while (cantidadEstudiantes < 0);
 
        Estudiante[] estudiantes = new Estudiante[cantidadEstudiantes];
        double[] promedios = new double[cantidadEstudiantes];
 
        //Ahora leemos los datos de los estudiantes
        for (int i = 0; i < estudiantes.length; i++) {
            try {
                Estudiante e = new Estudiante();
                System.out.println("Datos del estudiante: " + (i + 1));
                System.out.println("Introduzca el nombre:");
                e.setNombre(br.readLine());
                System.out.println("Introduzca el apellido:");
                e.setApellido(br.readLine());
                for (int j = 0; j < e.getCalificaciones().length; j++) {
                    try {
                        System.out.println("Introduzca la calificación de la materia " + (j + 1) + ":");
                        e.setCalificacion(j, Integer.parseInt(br.readLine()));
                    } catch (IOException | NumberFormatException ex) {
                        System.out.println("Hubo un error de lectura\nRegresemos...");
                        j--;
                    }
                }
                estudiantes[i] = e;
                promedios[i] = e.getPromedio();
            } catch (IOException | NumberFormatException ex) {
                System.out.println("Hubo un error de lectura\nRegresemos...");
                i--;
            }
        }
 
        //a continuación mostramos los datos de los estudiantes
        System.out.println("\n\n\nA continuación los datos de los estudiantes:");
        for (int i = 0; i < estudiantes.length; i++) {
            System.out.println("\nEstudiante #" + (i + 1) + ":");
            System.out.println(estudiantes[i].toString());
        }
        //a continuación mostramos los datos de los estudiantes
        System.out.println("\n\n\nA continuación el arreglo de los promedios:");
        int t = 0;
        for (int i = 0; i < promedios.length; i++) {
            t += promedios[i];
            System.out.println("Promedio #" + (i + 1) + ":" + promedios[i]);
        }
        System.out.println("Promedio general del grupo: " + (t / new Double(promedios.length)));
    }
}

Pruebalo y me comentas
Saludos!!
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar