Problem bei Anwendung von Feldern

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo

Ich komme bei meiner Aufgabe irgendwie nicht zurecht 🙁
Ich soll ein Programm schreiben, dass nach Eingbe der gesamten Notenanzahl und eingabe der einzelnen Noten einen Durchschnitt sowie eine Statistik ausgibt. Den Durchschnitt krieg ich noch ohne Probleme hin, aber die Statistik sieht ziemlich mies aus... Ich füg mal den Quelltext mit Erkläungen bei. Vieleicht weiss ja wer weiter.

Code:
import util.StandardIO;
public class Notenfeld3 {
	public static void main(String argv[]) {
		StandardIO io = new StandardIO();
		float summe = 0;
		float notenfeld[];
		int statfeld[];
		int notenanzahl;
		int statzahl=0;

		notenanzahl = io.readInt("Anzahl der Noten angeben: ");

		notenfeld = new float[notenanzahl];
		statfeld = new int[6];
		
		for (int i = 0; i < notenanzahl; i++) {
			notenfeld[i] = io.readInt((i + 1) + ". Note angeben: ");
			summe = summe + notenfeld[i];
		}

		io.println("Notenüberblick: ");
		for (int i = 0; i < statfeld.length; ++i) {
			for (int z=0; z<notenfeld.length; ++z){
				if ((i+1)==notenfeld[z]){
					statzahl = statzahl + 1;
				}else {
					statzahl = statzahl + 0;
				}
			}
			io.println(statzahl+" mal Note "+(i+1));
		}

		io.println(" ");
		io.println("Notendurchschnitt: " + (summe / notenanzahl));
	}
}
 
> Ich füg mal den Quelltext mit Erkläungen bei.

die Erklärungen folgen noch? 😉

--------

nun ja, erstmal musst du definieren was 'die Statistik' ist,
was soll angezeigt werden,

einfach nur Note <-> Anzahl für alle Noten?

dann mache doch eine Schleife über das Notenarray,
i ist die Note, stat ist die Anzahl, zusammen ausgeben?
aufpassen mit Index 0 und Note 1

aber mir scheint, das hast du auch schon irgendwie in Zeile
io.println(statzahl+" mal Note "+(i+1));

also was ist die Frage?! 😉

--------------

statzahl = statzahl + 0;

ist übrigens recht sinnlos, könnte komplett mit dem zugehörigen else-Fall wegfallen,

noch mal eine weitergehende Vereinfachung (und sei es nur als intellektuelle Anregung):

Code:
     for (int i = 0; i < notenanzahl; i++) {
         notenfeld[i] = io.readInt((i + 1) + ". Note angeben: ");
         summe = summe + notenfeld[i];
      }

      io.println("Notenüberblick: ");
      for (int i = 0; i < statfeld.length; ++i) {
         for (int z=0; z<notenfeld.length; ++z){
            if ((i+1)==notenfeld[z]){
               statzahl = statzahl + 1;
            }else {
               statzahl = statzahl + 0;
            }
         }
         io.println(statzahl+" mal Note "+(i+1));
      }
=

Code:
     for (int i = 0; i < notenanzahl; i++) {
         notenfeld[i] = io.readInt((i + 1) + ". Note angeben: ");
         summe = summe + notenfeld[i];
         statfeld[notenfeld[i]-1]++;
      }

      io.println("Notenüberblick: ");
      for (int i = 0; i < statfeld.length; ++i) {
           io.println(statfeld[i]+" mal Note "+(i+1));
      }
(ungetestet)
 
Danke für die schnelle Antwort erstmal....


Der else part war überflüssig, aber da das programm nicht so lief wie es laufen sollte, hab ich einfach mal alles akribisch genau aufgeschrieben... ICh stell den quelltext nochmal mit erklärungen ein wie ich es mir gedacht habe.
Also das Programm soll so laufen:

1: Anzahl Noten eingeben - Bsp 4
2: 4 einzelne Noten eingeben - Bsp 1-4-2-5
3: Durchschnitt berechen - Bsp 3
4: Statistik ausgeben - Bsp 1 mal Note 1
1 mal Note 2
0 mal Note 3
1 mal Note 4
1 mal Note 5
0 mal Note 6




Code:
import util.StandardIO;

public class Notenfeld3 {
	public static void main(String argv[]) {
		StandardIO io = new StandardIO();
		float summe = 0;
		float notenfeld[];
		int statfeld[];
		int notenanzahl;
		int statzahl=0;

		notenanzahl = io.readInt("Anzahl der Noten angeben: ");

		notenfeld = new float[notenanzahl];
		statfeld = new int[6];                                  // statistikfeld mit 6 werten für 6 Noten
		
		for (int i = 0; i < notenanzahl; i++) {
			notenfeld[i] = io.readInt((i + 1) + ". Note angeben: ");
			summe = summe + notenfeld[i];          // Durchschnitt
		}

		io.println("Notenüberblick: ");
		for (int i = 0; i < statfeld.length; ++i) {          // Hier werden die 6 Noten nacheinander durchgegangen
			for (int z=0; z<notenfeld.length; ++z){  //  wird geprüft ob die eingegeben werte (noten) mit... 
				if ((i+1)==notenfeld[z]){              // ... dem wert aus der ersten for schleife übereinstimmen.
					++statzahl;                      
				}
			}
			io.println(statzahl+" mal Note "+(i+1));
		}

		io.println(" ");
		io.println("Notendurchschnitt: " + (summe / notenanzahl));
	}
}
 
SlaterB hat gesagt.:
Code:
     for (int i = 0; i < notenanzahl; i++) {
         notenfeld[i] = io.readInt((i + 1) + ". Note angeben: ");
         summe = summe + notenfeld[i];
         statfeld[notenfeld[i]-1]++;
      }

      io.println("Notenüberblick: ");
      for (int i = 0; i < statfeld.length; ++i) {
           io.println(statfeld[i]+" mal Note "+(i+1));
      }

1000 Dank - alles klar - damit klappt es einwandfrei! ;-)
 
schlauer wäre es, sich zu überlegen was an deinem Code falsch ist,

hatte vorher nicht so genau raufgeschaut,
kann nun ungetestet nur entdecken,
dass du statzahl nicht wieder auf 0 setzt zu Beginn jeder Note
 
Ahh jetzt hab ich es verstanden - das ist es....

Bei meinem aller ersten Quellcode fehlt wirklich nur dass man statzahl wieder auf 0 setzen muss für jede Note ( was gar nicht mal so unlogisch ist ^^) dann läuft das program. Dann ersetzt man noch das überflüssige statzahl durch den passenden Wert aus dem statfeld ersetzt.

Durch weiteres verfeinern kommt man dann auf deine perfekte 😀 Lösung.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben