Лет Error al sacar medias de alumnos asignaturas напряженность en Java

Шаг скрутки Estoy realizando un ejercicio para clase en el cual que pedir el número de alumnos y las asignaturas de cada alumno. Una vez que se sabe esta información, жабы se piden las 3 notas por módulo y se hace la media solamente si tienes aprobadas (las 3 notas de todos Лос módulos).

El problema es que me hace bien la media, y меня напряженность saca el error de que hay alguna, pero sólo en las 3 últimas отмечает que introduzco por teclado. Es decir, напряженность si el alumno tiene dos modulos y una de las notas está en el primer по модулю, y en el segundo esta todo aprobado, я saca la media en vez del error.

//CLASE ALUMNOS
package NotasAlumnos;

import utilidadaesGenerales.Utilidades;

/**
 *
 * @author Anna
 */
public class Alumno {

    private String nombre, nomAsig;
    private float nota1, nota2, nota3;
    private int cantidadMod;
    private int contador = 1;
    private float media[], mediaTotal;
    private boolean aprobado;

    public void pedirNombre() {
        nombre = Utilidades.pedirCadena("\n" + Utilidades.Colores.CYAN + "\tIntroduzca su nombre: ");
    }

    public void pedirCantModulos() {
        cantidadMod = Utilidades.pedirNumeroEntero("\n" + Utilidades.Colores.CYAN + "\t" + nombre + " ,introduzca su número de asignaturas: ");
    }

    public void pedirNotas() {
        media = new float[cantidadMod];
        aprobado = true;
        for (int cont = 0; cont < this.cantidadMod; cont++) {

            System.out.println("\n" + Utilidades.Colores.CYAN + "\t\tVamos a introudocir las notas para la asignatura " + contador++);
            nota1 = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la primera evaluación : ");
            nota2 = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la segunda evaluación:  ");
            nota3 = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca la nota de la tercera evaluación: ");

            media[cont] = (nota1 + nota2 + nota3) / 3;
            //mediaTotal += media;

        }

        for (int i = 0; i < cantidadMod; i++) {

            if (nota1 < 5 || nota2 < 5 || nota3 < 5) {
                aprobado = false;
                System.out.println("Alguna de tus evaluaciones de la asignatura " + i + "  está suspensa y tienes que ir a septiembre");

            } else {
                System.out.println("lA MEDIA DEL MODULO " + (i + 1) + " ES " + media[i] + " " + nombre);

            }

        }

        // mediaTotal /= cantidadMod;
    }

    public void pedirTodo() {
        pedirNombre();
        pedirCantModulos();
        pedirNotas();
    }

    /* public float getMedia() {
        return media;
    }*/
    public float getMediaTotal() {
        return mediaTotal;
    }

    public int getCantidadMod() {
        return cantidadMod;
    }

    public String getNombre() {
        return nombre;
    }

    public String getNomAsig() {
        return nomAsig;
    }

    public float getNota1() {
        return nota1;
    }

    public float getNota2() {
        return nota2;
    }

    public float getNota3() {
        return nota3;
    }

    Alumno() {
        pedirTodo();
    }
}
//MAIN
package NotasAlumnos;

import java.util.Scanner;
import utilidadaesGenerales.Utilidades;

/**
 *
 * @author Anna
 */
public class PrincipalAlumnos {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        int cantidadAl;
        float mediaNotas;

        Scanner pedir = new Scanner(System.in);
        System.out.print("\n"+Utilidades.Colores.CYAN+"\tIntroduzca el numero de alumnos: ");
        cantidadAl = pedir.nextInt();
        for (int i = 1; i <= cantidadAl;  i++ ) {
            Alumno alum = new Alumno();



        }

Creo que el error es la variable de control aprobado, que не я está haciendo nada, pero никакой sé muy bien cómo funcionan las booleanas aún.


Y luego de las respuestas recibidas, intenté esto, pero ahora я da ошибка!

public void pedirNotas() {
    media = new float[cantidadMod];
    notas = new float [cantidadMod];
    aprobado = true;
    for (int cont = 0; cont < this.cantidadMod; cont++) {

        System.out.println("\n" + Utilidades.Colores.CYAN + "\t\tVamos a introudocir las notas para la asignatura " + contador++);
        notas[cont][0] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la primera evaluación : ");
        notas[cont][1] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la segunda evaluación:  ");
        notas[cont][2] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca la nota de la tercera evaluación: ");

        media[cont] = (notas[cont][0] + notas[cont][1] + notas[cont][2]) / 3;
        //mediaTotal += media;

    }

    for (int i = 0; i < cantidadMod; i++) {

        if (notas[i][0] < 5 || notas[i][1] < 5 || notas[i][2] < 5) {
            aprobado = false;
            System.out.println("Alguna de tus evaluaciones de la asignatura " + i + "  está suspensa y tienes que ir a septiembre");

        } else {
            System.out.println("lA MEDIA DEL MODULO " + (i + 1) + " ES " + media[i] + " " + nombre);

        }

Я da ошибка en las líneas de

 notas[cont][0] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la primera evaluación : ");
            notas[cont][1] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la segunda evaluación:  ");
            notas[cont][2] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca la nota de la tercera evaluación: ");

            media[cont] = (notas[cont][0] + notas[cont][1] + notas[cont][2]) / 3;

ошибка: выстройте requiered, но найденное плавание.

1
задан 17.01.2017, 14:17
0 ответов

Проблема проистекает того, что nota1, nota2, nota3 они имелись между всеми модулями, и они будут сохранять ссылку на замечания последнего вошедшего модуля, а именно, эта часть кода

...
        for (int i = 0; i < cantidadMod; i++) {

            if (nota1 < 5 || nota2 < 5 || nota3 < 5) {  
                aprobado = false;
                System.out.println("Alguna de tus evaluaciones de la asignatura " + i + "  está suspensa y tienes que ir a septiembre");

            } else {
                System.out.println("lA MEDIA DEL MODULO " + (i + 1) + " ES " + media[i] + " " + nombre);

            }

        }
...

он возвратит всегда то же самое, и будет средний показатель последнего модуля, если это случай, в котором он принимает, или ошибка женила противоположность.

Самое простое решение состоит в сохранении замечаний каждого модуля в договоренности двух размеров

public void pedirNotas() {
    media = new float[cantidadMod];
    notas = new float[cantidadMod][3]; // debes crear el campo
    aprobado = true;
    for (int cont = 0; cont < this.cantidadMod; cont++) {

        System.out.println("\n" + Utilidades.Colores.CYAN + "\t\tVamos a introudocir las notas para la asignatura " + contador++);
        notas[cont][0] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la primera evaluación : ");
        notas[cont][1] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca su nota de la segunda evaluación:  ");
        notas[cont][2] = Utilidades.pedirNumeroFloat("\n" + Utilidades.Colores.MORADO + "\t\tIntroduzca la nota de la tercera evaluación: ");

        media[cont] = (notas[cont][0] + notas[cont][1] + notas[cont][2]) / 3;
        //mediaTotal += media;

    }

    for (int i = 0; i < cantidadMod; i++) {

        if (notas[i][0] < 5 || notas[i][1] < 5 || notas[i][2] < 5) {
            aprobado = false;
            System.out.println("Alguna de tus evaluaciones de la asignatura " + i + "  está suspensa y tienes que ir a septiembre");

        } else {
            System.out.println("lA MEDIA DEL MODULO " + (i + 1) + " ES " + media[i] + " " + nombre);

        }

    }

    // mediaTotal /= cantidadMod;
}

P.D: Если ты используешь предыдущее решение, nota1, nota2, nota3, у них не будет никакого использования, так что ты можешь удалять их из класса Ученик, в Вашем месте, ты будешь должен создавать поле, названное общеизвестным, как float [] []

0
ответ дан 03.12.2019, 17:40
  • 1
    Большое спасибо из-за того, что отвечает! –  16.01.2017, 09:51

В твоем последнем ответе ты объявляешь замечания как unidimensional вместо двухмерного.

Изменись

notas = new float [cantidadMod];

Из-за

notas = new float [cantidadMod][3];

Сосредоточись на примере eduen-sarceño

2
ответ дан 03.12.2019, 17:40
  • 1
    Продолжи давать ошибку. Incomplatble types, float [] [] cannot convert to float []. :( –  16.01.2017, 10:02
  • 2
    Во время объявления переменной замечаний ты должен помещать ему, что тип также - float [] [] –  16.01.2017, 10:09
  • 3
    Это верно, perdó n. я только что проснулся jajaja. Вывод программы правилен, когда есть suspensa уже, не просит у меня замечания других предметов... Я хочу попробовать просить все замечания, всех предметы, хотя он отменит..., если результат в конце концов - что suspendió какая-то, которая доставала бы сообщение ошибки, и если aprobó все, кто меня доставал бы средний показатель. Больше, чем что-либо из-за того, что имеет реестр всех Ваших замечаний, suspensas или нет! Я понимаю, что проблема está в: –  16.01.2017, 10:32