1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java Programm Notenauswertung

Dieses Thema im Forum "PHP & Co." wurde erstellt von moskito08, 25.02.07.

  1. moskito08

    moskito08 Alkmene

    Dabei seit:
    24.03.06
    Beiträge:
    34
    Hallo!!
    Ich habe hier ein Java Programm geschrieben um die Anzahl von Noten und dann die jeweiligen Noten einzugeben. Danach berechnet es den Durchschnitt.
    Funktioniert so weit!

    Jetzt möchte ich noch die Anzahl der Noten die besser sind als der Durchschnitt ausgegeben bekommen.
    Mein Ansatz wäre eine for Schleife mit einer if Bedingung. siehe markierte 1,2
    Ich befürchte aber es ist der falsche Ansatz, funktioniert auch nicht! Wer hat eine Alternative?

    class Notenber {
    public static void main(String[] args) {


    boolean bn=true;
    int anz=0;
    double summe=0,mittelwert;
    int n;
    n=Integer.parseInt(args[0]);

    int[]noten=new int[n+1];

    for(int i=1;i<=n;i++) {
    noten=Integer.parseInt(args);
    summe=summe+noten;
    }
    mittelwert=summe/n;

    System.out.println(mittelwert);


    1 for(int j=1;j<=n;j++)

    2 if(noten[j]<mittelwert)

    anz=anz+1;

    else

    anz=0;

    System.out.println(anz);

    }
    }
     
  2. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Ähh, erstens vergleichst Du hier Birnen mit Eiern ;)

    'noten[]' ist ein integrer Wert, 'mittelwert' ein double. d.h. dass die VM den double zum integer kastriert und die Nachkommastellen einfach entfallen. In Deinem Fall ok, denn Dich interessieren nur die real kleineren Werte. Ansonsten aber katatrophal, denn eine Rundung findet nicht statt.

    Zweitens, und das ist der Punkt: Du setzt JEDESMAL, wenn eine Note ('note[j]') kleiner als der Mittelwert ist, den Wert von 'anz' auf 0....

    Du solltest besser 'anz' in Ruhe lassen, wenn die Note nicht besser als der Mittelwert ist, also den 'else'- Zweig einfach weglassen ;)

    Gruß,

    .commander
     
  3. moskito08

    moskito08 Alkmene

    Dabei seit:
    24.03.06
    Beiträge:
    34
    ok, leuchtet ein!
    wenn der double wert plötlich ein int ist, das ist doof.
    dann muss ich das irgendwie anders lösen.
     
  4. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Ich gehe davon aus, dass die Konsequenzen der nicht vorhanden Klammerung Dir voll bewusst sind. Mit exakter Klammerung schaut Dein Code so aus:

    Code:
    for(int j=1;j<=n;j++) {
      if(noten[j]<mittelwert){
        anz=anz+1;
      }
      else{
        anz=0;
      }
    }
    
    System.out.println(anz); 
    
    Du verstehst? Betrachte den 'else'-Zweig, der wird in jedem Schleifendurchlauf angesprungen, wenn die Note > Mittelwert ist....
     
  5. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Lese den Teil meines Posts bitte nochmal, denn darum gehts im Moment gar nicht, ich hab dialektisch angesetzt und den eigentlichen Fehler als Zweites genannt ;)

    Gruß,

    .commander
     
  6. csharp

    csharp Gast

    Aussserdem erhälst du so die Noten die schlechter als der Durchschnitt sind, das war ja aber nicht dein ziel ;)
     
  7. moskito08

    moskito08 Alkmene

    Dabei seit:
    24.03.06
    Beiträge:
    34
    es ist jetzt schon besser als vorher!

    for(int j=1;j<=n;j++) {

    if(noten[j]<mittelwert) {

    anz=anz+1;
    }

    }
    System.out.println(anz);

    und es scheint zu funktionieren!
    aber ist es so sinnvoll?
    wo lagen meine fehler, zerstreu :)
     
  8. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    So sollte es funktionieren, vorausgestezt, dass die Noten, die Du betrachtest, immer integre Werte sind.

    Gratuliere,

    .commander
     
  9. moskito08

    moskito08 Alkmene

    Dabei seit:
    24.03.06
    Beiträge:
    34
    Danke!
    Also lag ich mit meinem "Anfangskonstrukt" gar nicht so verkehrt?
    Ich dachte man braucht bei einer if zwingend ein else! Super wenn man etwas dazulernt!!
     
  10. csharp

    csharp Gast

    Wie gesagt du gibst die Noten aus die kleiner als der Durchschnitt und nicht grösser als der Durchschnitt sind.

    for(int j=1;j<=n;j++) {
    if(noten[j]>mittelwert) {
    anz++;
    }
    }
    System.out.println(anz);
     
  11. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Ich habe zwar von Java wenig Ahnung, aber ich glaube, er sucht nach numerisch kleineren Beträgen, wenn er davon ausgeht, dass die beste Note den kleinsten Betrag hat. Für Deutschland wäre das passend (1=>'sehr gut', 2=>'gut'>, 3=>'befriedigent', usw.), oder?
     
  12. csharp

    csharp Gast

    Haha, der Schweizer wieder ;) Du hast natürlich Recht.
     
  13. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Schweizer? Wär ich gern, die haben so eine herrliche niedrige Mehrwertsteuer.
     

Diese Seite empfehlen