Notenauswertung: Einlesen der Anzahl, Bildung Mittelwert

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo liebes Forum!

Habe hier ein Programm geschrieben, dass folgende Aufgabe erfüllen sollte!
Es zickt aber noch etwas und mir ist eine Sache nicht klar.
Aber erstmal die Aufgabe des Programms:

Eingabe der Anzahl der Noten;
Eingabe der Noten(1,2,3,4 und 5);
Berechnung und Ausgabe des Notendurchschnitts als arithm. Mittelwert;

Code:
class Notenber  {
    public static void main(String[] args)  {  
     
     double summe=0,mittelwert;
     int n;            
     n=Integer.parseInt(args[0]);
    
     int[]noten=new int[n-1];
      
         for(int i=0;i<n;i++)  {
         noten[i]=Integer.parseInt(args[i]);
         summe=summe+noten[i];
         }
             mittelwert=summe/n;
       
             System.out.println(mittelwert);   
             }
        }


Belegt: n=Integer.parseInt(args[0]) auch schon einen Platz meines Arrays? Was wird bei args[0] genau gemacht, belegt?
Hat jemand eine Idee, was an meinem Programm optimiert, verbessert werden muss, damit es einwandfrei läuft?

Danke,
Steffen
 
> Belegt: n=Integer.parseInt(args[0]) auch schon einen Platz meines Arrays?

falls du mit 'dein Array' noten meinst: nö, das Array taucht da nicht auf, also wird es nicht verändert..

> Was wird bei args[0] genau gemacht, belegt?
args ist das Array der Parameter beim Programmstart, 0 ist der erste dieser Parameter,
der wird hier nur ausgelesen, nicht 'belegt'

> Hat jemand eine Idee, was an meinem Programm optimiert,
> verbessert werden muss, damit es einwandfrei läuft?

bei den obigen Fragen ist zu bezweifeln, dass es überhaupt 'dein' Programm ist 😉
(sorry)

ansonsten solltest du erstmal überlegen ob die Anforderungen erfüllt sind,
du sprichst von 'Zicken', das ist keine konkrete Problembeschreibung,

ich sehe allerdings auf die Schnelle nix zum Thema 'Benutzereingaben einlesen',
das fehlt wohl noch komplett oder sind Paremter beim Programmstart ok?

--------

warum
int[]noten=new int[n-1];
für n Zahlen?

-----

zu beachten ist, dass int ganzzahlig geteilt wird:

double x = 5/3;

-> x = 1

verwende
double x = ((double) 5)/((double) 3);
um ganz sicher zu gehen bzw. probiere aus und lerne dabei, ganz so schlimm muss man es nicht schreiben
 
Leider komme ich bei meinem Programm immer noch nicht weiter!
Ein Fehler war bei der Erzeugung der Anzahl der Arrays "n" ich hatte da wohl etwas mit der Tatsache verwechselt:
das die Arrays bei 0 beginnen.
Nun gut, das wäre behoben!

Folgendes gibt mein Programm aus:

Ich gebe 3 4 3 2 ein, dann bekomme ich 4.0 raus.
Anscheinend werden alle Zahlen, auch n=3 addiert und durch 3 dividiert.
Es soll doch aber n=3 gar nicht mit dazuaddieren!!

Hier die aktuelle Version:

Code:
class Notenber  {
    public static void main(String[] args)  {  
     
     double summe=0,mittelwert;
     int n;            
     n=Integer.parseInt(args[0]);
    
     int[]noten=new int[n];
      
         for(int i=0;i<n;i++)  {
         noten[i]=Integer.parseInt(args[i]);
         summe=summe+noten[i];
         }
             mittelwert=summe/n;
       
             System.out.println(mittelwert);   
             }
        }
 
Code:
for(int i=0;i<n;i++)  {

Du fängste bei args[0]an zu summieren...
args[0] ist aber die Anzahl die du nicht willst..
also beginne die for-Schleife bei i=1 und lass sie bis zum Ende des Arrays laufen (i<=n)
 
Hi also wenn ich das Programm ausfuehre, dann kommt 3,33333 raus, so wie es bei dem Programm wie es jetzt ist auch richtig gerechnet ist.
Das Problem liegt grad nur noch in der for-Schleife:
Code:
for(int i=0;i<n;i++)  
{
         noten[i]=Integer.parseInt(args[i]);
         summe=summe+noten[i];
         }
Da wird: args[0] + args[1] + args[2] gerechnet. Was bei Eingabe von 3 4 3 2 fogendes ist: 3 + 4 + 3 = 10 . Und 10 / 3 = 3,33

Lange Rede kurzer Sinn: Änder die Schleife in:
Code:
for(int i=1;i<n+1;i++)  
{
         noten[i-1]=Integer.parseInt(args[i]);
         summe=summe+noten[i-1];
         }
und alles wird gut. 🙂

Grusse
HG

PS: Pruefe am besten vorher wie viele Parameter übergeben worden sind (args.length) sonst wird dein Programm irgendwann mal richtig "rumzicken" 🙂
 
dann muss ich aber noch n+1 schreiben, oder?
Code:
class Notenber  {
    public static void main(String[] args)  {  
     
     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[i]=Integer.parseInt(args[i]);
         summe=summe+noten[i];
         }
             mittelwert=summe/n;
       
             System.out.println(mittelwert);   
             }
        }

es sieht so aus, als ob es funktioniert!
jetzt muss ich noch einige erweiterungen schreiben.
wenn ich nicht weiterkomme, soll ich hier in diesem thread weiterposten?
danke,
steffen
 
Ich möchte jetzt mein Programm noch um die Funktion erweitern:

Ausgabe der Anzahl der Noten, die besser sind als der Notendurchschnitt

Leider bricht die Schleife gleich ab, sobald die erste Note kleiner ist als der Durchschnitt.

Code:
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[i]=Integer.parseInt(args[i]);
         summe=summe+noten[i];
         }
             mittelwert=summe/n;
       
             System.out.println(mittelwert);   
                
                
                for(int j=1;j<=n;j++)  
                
                if(noten[j]<mittelwert)
                
                anz=anz+1;
                
                else
                
                anz=0;
                
                System.out.println(anz);
             
             }
        }
 
ich hab die lösung!
Code:
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[i]=Integer.parseInt(args[i]); 
         summe=summe+noten[i]; 
         } 
             mittelwert=summe/n; 
        
             System.out.println(mittelwert);    
                
                
                for(int j=1;j<=n;j++)  {   
                
                if(noten[j]<mittelwert)   
                {
                anz=anz+1; 
                }
                
                }
              
              System.out.println(anz);
             } 
        }

ich hab einfach else weggelassen, nun funktioniert es!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben