Java :: Aufgabe #255

1 Lösung Lösung öffentlich

Arrays-zweidimensional Noten Notenberechnung

Fortgeschrittener - Java von sinanoz05 - 29.01.2020 um 11:28 Uhr
In einer Klasse werden in einem Schulhalbjahr in 6 Fächern bis zu 5 Klassen arbeiten geschrieben. Es ist ein Programm zu entwickeln, mit dem ein Schüler seine je Fach erzielten Noten eingeben kann. Bei nicht geschriebenen Arbeiten wird als Note die Null gespeichert. Der Rechner soll er mitteln,wie vieleArbeitender Schüler geschriebenhat. Ferner sollder Rechner den Noten durchschnitt proFachberechnen. Nachjeder Eingabe erscheint folgender Bildschirm(im Anhang):

Hinweise zur Realisierung:  im Hauptprogramm werden folgende Funktionen aufgerufen: eingabe() unduebersicht()  eingabe(): Eingabeeiner Note Übergabeparameter: keine Rückgabe wert: n: zweidimensionales Feld vom Typ Ganzzahl  übersicht(): Ausgabeder Notenübersicht Übergabeparameter: n:zweidimensionales Feld vom Typ Ganzzahl Rückgabewert:kein

Achtung! wenninmain:
1) Feld-def.:noten[6,5]
2) Feld an Methode übergeben noten=eingabe(noten)
3) in Methode neues Feld n[3,3]  bei return (n) wird in der Aufrufzeile von main das Feld noten bzw.die Referenz auf das Feld überschrieben!!! Referenz auf noten wird durch die Referenz auf das neue Feld n überschrieben!

Lösungen:

vote_ok
von luckyluke (850 Punkte) - 06.03.2020 um 12:30 Uhr
Quellcode ausblenden Java-Code
package com.company;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Berechnung {
    Scanner scanner = new Scanner(System.in);
    private int faecher;
    private int klausuren;
    double[][] noten;
    double sumAvg = 0;
    double avg;
    int faecherCount = 0;
    public Berechnung(int faecher, int klausuren) {
        this.faecher = faecher;
        this.klausuren = klausuren;
        noten = new double[faecher][klausuren + 2];
    }

    public void eingabe() {
        int klausurNummer;
        int fachNummer;
        System.out.print("Fach-Nummer\t\t:\t");

        while (true) {
            try {

                fachNummer = scanner.nextInt();

                while (fachNummer > klausuren + 1) {

                    System.out.println("Fach-Nummer zwischen 1-" + faecher);
                    fachNummer = scanner.nextInt();

                }
                // System.out.println("Fach-Nummer\t:\t" + fachNummer);
                break;
            } catch (InputMismatchException e) {

                String errStr = scanner.next();
                System.out.println("Wrong input! Try again");
            }

        }


        System.out.print("Klausur-Nummer\t:\t");
        while (true) {
            try {

                klausurNummer = scanner.nextInt();

                while (klausurNummer > klausuren) {

                    System.out.println("Klausur-Nummer zwischen 1-" + klausuren);
                    klausurNummer = scanner.nextInt();

                }
                //System.out.println("Arbeit-Nummer\t:\t" + klausurNummer);
                break;
            } catch (InputMismatchException e) {

                String errStr = scanner.next();
                System.out.println("Wrong input! Try again");
            }

        }

        System.out.print("Note von Klausur " + klausurNummer + "\t:\t");
        while (true) {
            try {
                noten[fachNummer - 1][klausurNummer - 1] = scanner.nextInt();

                while (noten[fachNummer - 1][klausurNummer - 1] > 6) {

                    System.out.println("Note zwischen 1-6!");
                    noten[fachNummer - 1][klausurNummer - 1] = scanner.nextInt();

                }
                //System.out.println("Note von Klausur " + klausurNummer + "\t:\t" + noten[fachNummer - 1][klausurNummer - 1]);
                break;
            } catch (InputMismatchException e) {

                String errStr = scanner.next();
                System.out.println("Wrong input! Try again");
            }


        }
        for (int l = 0; l < faecher; l++) {
            double anzahl1 = 0;
            double sum = 0;
            for (int k = 0; k < klausuren; k++) {
                if (noten[l][k] != 0) {

                    anzahl1++;

                    sum += noten[l][k];
                    noten[l][klausuren] = (int) anzahl1;
                    noten[l][klausuren + 1] = (sum / anzahl1);
                }

            }
        }
    }

    public void uebersicht() {

        System.out.println("Fach\t Arbeitsnummer");
        System.out.println("------------------------------------------------------------------");
        System.out.println("\t\t1\t\t2\t\t3\t\t4\t\t5\t\tAnzahl\tDurchschnitt");
        System.out.println("------------------------------------------------------------------");

        for (int j = 0; j < noten.length; j++) {
            System.out.print(j + 1 + "\t\t");

            for (int i = 0; i < klausuren + 1; i++) {
                System.out.print((int) noten[j][i] + "\t\t");
                if (i == klausuren) {
                    System.out.print(noten[j][i + 1]);
                }
            }


            System.out.println();

        }

    }

    public void countAvailableAvg() {

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

            if (noten[i][klausuren + 1] != 0) {
                sumAvg += noten[i][klausuren + 1];
                faecherCount++;
            }
        }
    }

    public void eingabeBis() {
        while (true) {
            eingabe();
            uebersicht();
            System.out.println("\n...weiter[j/n] ?");
            String entscheidung;
            entscheidung = scanner.next();
            if (entscheidung.equals("n")) {
                System.out.println("Zeugnisdurchschnitt: ");
                countAvailableAvg();
                System.out.print(sumAvg / faecherCount);
                return;
            }
        }
    }


    public static void main(String[] args) {
        // write your code here
        Berechnung noten = new Berechnung(6,5);
        noten.eingabeBis();
    }
}