• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java Programm Notenauswertung

moskito08

Alkmene
Registriert
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);

}
}
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
Ä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
 

moskito08

Alkmene
Registriert
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.
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
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....
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
ok, leuchtet ein!
wenn der double wert plötlich ein int ist, das ist doof.
dann muss ich das irgendwie anders lösen.

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
 

csharp

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

moskito08

Alkmene
Registriert
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 :)
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
So sollte es funktionieren, vorausgestezt, dass die Noten, die Du betrachtest, immer integre Werte sind.

Gratuliere,

.commander
 

moskito08

Alkmene
Registriert
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!!
 

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);
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
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);

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?
 

csharp

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