Habe ein frage wie man etwas macht.

JavaNewbie2.0

Bekanntes Mitglied
Ich habe ein ganz einfaches programm geschrieben was den Notendurchschnitt ausrechnet aber jetzt möchte is das belibih viel faecher angeben kann hat da einer eine ahnung oder einen ansatz?
Danke.

Java:
package Notendurchschnitt;

import java.util.Scanner;

public class Notendurchschnitt {

    private static Scanner scannerNotendurchschnitt;

    public static void main(String[] args) {
        int deutsch, mathe, englisch, italienisch, physik, musik, chemie, religion, zeichnen, geschichte, geografie, sport;
        float durchschnitt;     
        scannerNotendurchschnitt = new Scanner (System.in);     
       
        System.out.println("Schreibe alle deine Noten auf!");
     
        deutsch = scannerNotendurchschnitt.nextInt();     
        mathe = scannerNotendurchschnitt.nextInt();
        englisch = scannerNotendurchschnitt.nextInt();     
        italienisch = scannerNotendurchschnitt.nextInt();
        physik =  scannerNotendurchschnitt.nextInt();     
        musik = scannerNotendurchschnitt.nextInt();     
        chemie = scannerNotendurchschnitt.nextInt();     
        religion = scannerNotendurchschnitt.nextInt();     
        zeichnen = scannerNotendurchschnitt.nextInt();     
        geschichte = scannerNotendurchschnitt.nextInt();     
        geografie = scannerNotendurchschnitt.nextInt();     
        sport = scannerNotendurchschnitt.nextInt();
     
        durchschnitt = (deutsch + mathe + englisch + geografie + musik + sport +  + geschichte + zeichnen + italienisch + physik + chemie + religion) / 13;
     
        System.out.println("Dein Notenschnitt betreagt " + durchschnitt);
    }
}
 
Am besten die Fächer in einer dynamischen Datenstruktur wie einer Liste speichern, und am Ende zusammenrechnen.

Etwa so:
Java:
public class Notendurchschnitt {


    public static void main(String[] args) {
        List<Tupel<String, Integer>> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);

        int ende;
        do {
            System.out.print("\nFach: ");
            String fach = sc.nextLine();

            System.out.print("Note: ");
            int note = sc.nextInt();
            sc.nextLine();


            list.add(new Tupel<>(fach, note));

            System.out.print("\n[1] Weiteres Fach [2] Durchschnitt berechnen: ");
            ende = sc.nextInt();
            sc.nextLine();

        } while (ende != 2);

        System.out.println("---------------------------------------");

        int summe = 0;
        for (Tupel<String, Integer> t : list) {
            System.out.format("%-24s %8d\n", t.e, t.v);
            summe += t.v;
        }

        System.out.format("\n%-24s %8f", "Durchschnitt", (double) summe / (double) list.size());

    }
}

class Tupel<E, V> {
    E e;
    V v;

    public Tupel(E e, V v) {
        this.e = e;
        this.v = v;
    }
}
 
Am besten die Fächer in einer dynamischen Datenstruktur wie einer Liste speichern, und am Ende zusammenrechnen.

Etwa so:
Java:
public class Notendurchschnitt {


    public static void main(String[] args) {
        List<Tupel<String, Integer>> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);

        int ende;
        do {
            System.out.print("\nFach: ");
            String fach = sc.nextLine();

            System.out.print("Note: ");
            int note = sc.nextInt();
            sc.nextLine();


            list.add(new Tupel<>(fach, note));

            System.out.print("\n[1] Weiteres Fach [2] Durchschnitt berechnen: ");
            ende = sc.nextInt();
            sc.nextLine();

        } while (ende != 2);

        System.out.println("---------------------------------------");

        int summe = 0;
        for (Tupel<String, Integer> t : list) {
            System.out.format("%-24s %8d\n", t.e, t.v);
            summe += t.v;
        }

        System.out.format("\n%-24s %8f", "Durchschnitt", (double) summe / (double) list.size());

    }
}

class Tupel<E, V> {
    E e;
    V v;

    public Tupel(E e, V v) {
        this.e = e;
        this.v = v;
    }
}
Danke das du dir die Mühe gibst so etwas zu schreiben. Aber ich verstehe den code nicht ganz binn noch ein kompeltter noob in java mache es erst 5 tage. Könntest du es ein bisschen erklären bittte
 
Ich muss hier und in nachfolgenden Themen mal einforken, verwende nicht .nextInt(), sondern stattdessen (besser) .nextLine();.

Bearbeitung: Nach den Vorgaben so:
Java:
/**
 * @author
 */
public class Noten {

    int deutsch, mathe, englisch, italienisch, physik, musik, chemie, religion, zeichnen, geschichte, geografie, sport;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Field[] fields = Noten.class.getDeclaredFields();
        String[][] strings = new String[fields.length][2];
        int i = 0;
        for (Field field : fields) {
            String name = field.getName();
            name = Character.toUpperCase(name.charAt(0)) + name.substring(1);
            System.out.println("Jetzt ist das Fach " + name + " dran. Welche Note hast Du/Sie?");
            String line = sc.nextLine();
            line = line.replace(',', '.');
            strings[i][0] = name;
            strings[i][1] = line;
            i++;
        }
        float av = 0;
        for (String[] string : strings) {
            av += Float.parseFloat(string[1]);
        }
        av /= strings.length;
        System.out.println("Dein/Ihr Schnitt beträgt: " + av);
    }
}

Code:
Jetzt ist das Fach Deutsch dran. Welche Note hast Du/Sie?
5
Jetzt ist das Fach Mathe dran. Welche Note hast Du/Sie?
4
Jetzt ist das Fach Englisch dran. Welche Note hast Du/Sie?
3
Jetzt ist das Fach Italienisch dran. Welche Note hast Du/Sie?
2
Jetzt ist das Fach Physik dran. Welche Note hast Du/Sie?
1
Jetzt ist das Fach Musik dran. Welche Note hast Du/Sie?
2
Jetzt ist das Fach Chemie dran. Welche Note hast Du/Sie?
3
Jetzt ist das Fach Religion dran. Welche Note hast Du/Sie?
4
Jetzt ist das Fach Zeichnen dran. Welche Note hast Du/Sie?
3
Jetzt ist das Fach Geschichte dran. Welche Note hast Du/Sie?
2
Jetzt ist das Fach Geografie dran. Welche Note hast Du/Sie?
1
Jetzt ist das Fach Sport dran. Welche Note hast Du/Sie?
2
Dein/Ihr Schnitt beträgt: 2.6666667

Du siehst, ich nicht so gut sprechen Deutsch. 😀
 
Zuletzt bearbeitet von einem Moderator:
Ich muss hier und in nachfolgenden Themen mal einforken, verwende nicht .nextInt(), sondern stattdessen (besser) .nextLine();.

Bearbeitung: Nach den Vorgaben so:
Java:
/**
 * @author
 */
public class Noten {

    int deutsch, mathe, englisch, italienisch, physik, musik, chemie, religion, zeichnen, geschichte, geografie, sport;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Field[] fields = Noten.class.getDeclaredFields();
        String[][] strings = new String[fields.length][2];
        int i = 0;
        for (Field field : fields) {
            String name = field.getName();
            name = Character.toUpperCase(name.charAt(0)) + name.substring(1);
            System.out.println("Jetzt ist das Fach " + name + " dran. Welche Note hast Du/Sie?");
            String line = sc.nextLine();
            line = line.replace(',', '.');
            strings[i][0] = name;
            strings[i][1] = line;
            i++;
        }
        float av = 0;
        for (String[] string : strings) {
            av += Float.parseFloat(string[1]);
        }
        av /= strings.length;
        System.out.println("Dein/Ihr Schnitt beträgt: " + av);
    }
}

Code:
Jetzt ist das Fach Deutsch dran. Welche Note hast Du/Sie?
5
Jetzt ist das Fach Mathe dran. Welche Note hast Du/Sie?
4
Jetzt ist das Fach Englisch dran. Welche Note hast Du/Sie?
3
Jetzt ist das Fach Italienisch dran. Welche Note hast Du/Sie?
2
Jetzt ist das Fach Physik dran. Welche Note hast Du/Sie?
1
Jetzt ist das Fach Musik dran. Welche Note hast Du/Sie?
2
Jetzt ist das Fach Chemie dran. Welche Note hast Du/Sie?
3
Jetzt ist das Fach Religion dran. Welche Note hast Du/Sie?
4
Jetzt ist das Fach Zeichnen dran. Welche Note hast Du/Sie?
3
Jetzt ist das Fach Geschichte dran. Welche Note hast Du/Sie?
2
Jetzt ist das Fach Geografie dran. Welche Note hast Du/Sie?
1
Jetzt ist das Fach Sport dran. Welche Note hast Du/Sie?
2
Dein/Ihr Schnitt beträgt: 2.6666667

Du siehst, ich nicht so gut sprechen Deutsch. 😀
thx also .nextLine ist also besser funktioniert das immer?
 
Schau Dir diese Variante an. Vielleicht verstehst Du sie als Anfänger eher ?? 😛
Java:
import java.util.Scanner;
public class Notendurchschnitt {
    // Beim Starten von der Konsole werden die Fächer als Parameter übergeben
    public static void main(String[] args) {
        // args ist ein Feld von Strings mit der Länge args.length
        // args entält die übergebenen Parameter beim Programstart
        int anzahlfaecher = args.length;
        if( anzahlfaecher < 1 ){ // Wenn kein Fach übergeben wird terminiere
            System.out.println("Bitte die Namen der Fächer übergegen!!");
            System.exit(1);
        }
        // Feld von integer für die Noten erzeugen
        int[] noten = new int[anzahlfaecher];
                                       
        // Schleife über der Anzahl der Einträge im Feld args
        // zum Einlesen  der Noten
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < args.length; i++) {
            System.out.print("Die Note fuer " + args[i] + "\t ");
            noten[i] = sc.nextInt();
        }
        sc.close();
        int notensumme = 0;
        // Schleife über der Anzahl der Einträge im Feld args
        // zum Ausgeben der Noten und Fächer
        for (int i = 0; i < anzahlfaecher; i++) {       
            System.out.println(  noten[i] +"\t"+ args[i] );
            notensumme += noten[i]; // Summe der Noten addieren
        }
        // Berechnet den Notenschnitt und formatiert den double zu einem String mit einer Kommastelle
        String schnitt = String.format("%.1f\tNotenschnitt", (notensumme / (double) anzahlfaecher));
        System.out.println(schnitt);
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Gibt es eine Liste mit Fächern?
Woher stammt diese Liste?
Gibt es nur einen Schüler?
Gibt es mehrere Schüler?
Sollen alle Noten "gespeichert werden"?
wäre noch interessant zu wissen,
dann ich/du/er auch eine Architektur für das ganze wählen.

Und am besten vergiss Scanner komplett - nicht nur am Anfang schadet das mehr, als es nützt.
 
Schau Dir diese Variante an. Vielleicht verstehst Du sie als Anfänger eher ?? 😛
Java:
import java.util.Scanner;
public class Notendurchschnitt {
    // Beim Starten von der Konsole werden die Fächer als Parameter übergeben
    public static void main(String[] args) {
        // args ist ein Feld von Strings mit der Länge args.length
        // args entält die übergebenen Parameter beim Programstart
        int anzahlfaecher = args.length;
        if( anzahlfaecher < 1 ){ // Wenn kein Fach übergeben wird terminiere
            System.out.println("Bitte die Namen der Fächer übergegen!!");
            System.exit(1);
        }
        // Feld von integer für die Noten erzeugen
        int[] noten = new int[anzahlfaecher];
                                      
        // Schleife über der Anzahl der Einträge im Feld args
        // zum Einlesen  der Noten
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < args.length; i++) {
            System.out.print("Die Note fuer " + args[i] + "\t ");
            noten[i] = sc.nextInt();
        }
        sc.close();
        int notensumme = 0;
        // Schleife über der Anzahl der Einträge im Feld args
        // zum Ausgeben der Noten und Fächer
        for (int i = 0; i < anzahlfaecher; i++) {      
            System.out.println(  noten[i] +"\t"+ args[i] );
            notensumme += noten[i]; // Summe der Noten addieren
        }
        // Berechnet den Notenschnitt und formatiert den double zu einem String mit einer Kommastelle
        String schnitt = String.format("%.1f\tNotenschnitt", (notensumme / (double) anzahlfaecher));
        System.out.println(schnitt);
    }
}
hab mir das jetzt angeschaut aber was bedeutet \t??
 

Neue Themen


Zurück
Oben