# Notendurchschnitt



## Pauli99 (30. Mai 2015)

Hi Leute,
ich bin Eclipseneuling und habe ein Problem beim Ausarbeiten einer Übung mit Eclipse. Ich habe bereits die Forensuche genutzt. Leider war diese bisher wenig hilfreich.

Ich hoffe Ihr könnt mir bei meinem Problem auf die Sprünge helfen.

Die Aufgabenstellung lautet wie folgt: 

Geben Sie x Noten im Bereich von 1 bis 5ein. Wird ein Wert größer 5 eingegeben, soll das Programm stoppen und den Notendurchschnitt berechnen. Ohne dabei die letzte Zahl, die größer 5 ist, mitzurechnen.

Einen Ansatz habe ich bereits:
	
	
	
	





```
import java.util.Scanner;

public class Uebung13 {

    public static void main(String[] args) {
        
        Scanner in = new Scanner (System.in);
        
        double note;
        int notenanzahl=0;
        double summe = 0;
        double durchschnitt = 0;
        
        
        do {
            System.out.println("Geben Sie ihre Noten ein");
            note = in.nextDouble();
            
            notenanzahl ++;
            
            summe = summe + notenanzahl;
            summe++;
            
        }while ( note<6);
        
        durchschnitt = summe / (notenanzahl) ;
        
        System.out.println("Der Durchschnitt der Noten ist " + durchschnitt);
    }

}
```

Könnt ihr mir hier bitte einen kleinen Tipp geben, wie ich weiter machen kann? DANKE! 

MfG pauli99

PS: Ich hoffe, das mit der Formatierung ist jetzt in Ordnung?


----------



## Robinson97 (30. Mai 2015)

Ich würde an deiner Stelle die Abbruch bedingung in der while auf <= 5 setzen. 

```
do{
//Quellcode
}while( note <= 5);
```
damit kannst du schon mal fehler vorbeugen!
(Sorry das hier eben ein Falscher Beitrag stand)


----------



## Robinson97 (30. Mai 2015)

Und als zum Stoppen des Programms kannst du folgendes versuchen:

```
if(note >= 6){
 note = 0;
}
```
Weil sonst würde das Programm den Wert mitberechen. Warum machst du in dein Programm ein summe++ ?

PS: Hab gerade selbst nochmal die Forensuche benutzt und hab doch was gefunden:

Gruß Robinson97


----------



## Saheeda (30. Mai 2015)

Warum rechnest du summe = summe + notenanzahl? Müsste es nicht eher summe = summe + note sein?


----------



## Pauli99 (30. Mai 2015)

Danke für deine Info 
Habe jetzt versucht das Programm nach dem Beispiel aus dem Forum zu lösen.
Leider nimmt Eclipse die letzte Zahl, die das Programm abschließend beenden soll, auch noch mit in die 
Berechnung. 

Kannst du mir da bitte noch weiterhelfen, wie es formuliert werden kann, dass die letzte Zahl nicht in die Berechnung einbezogen wird? Danke! ???:L


----------



## Pauli99 (30. Mai 2015)

Bisher nimmt das Programm die letzte Zahl, die schlussendlich den Durchlauf beenden soll, mit in die Berechnung.
Die letzte Zahl verfälscht damit leider den Durchschnitt.
Mein aktueller Programmiercode sieht so aus:
	
	
	
	





```
import java.util.Scanner;

public class Uebung13 {

    public static void main(String[] args) {
        
        Scanner in = new Scanner (System.in);
        
        float note;
        int notenanzahl=1;
        float summe = 0;
        float durchschnitt = 0;
        int nr =1;
        
        do{ 

            System.out.println("Bitte geben Sie ihre " + nr + " Note ein: ");
            note = in.nextFloat();
            
            notenanzahl++;
            summe = summe + note;
            nr++;
            
        }while( note <=5);
        
        durchschnitt = summe / (notenanzahl - 1);
        
        System.out.println("Sie haben " + (notenanzahl - 1 ) + " Noten eingeben. Der Schnitt beträgt: " + durchschnitt );
            
        }
            
            
             
    }
```
Könnt ihr den Code bitte nochmal überfliegen?
Ich übe für einen bevorstehenden Test und möchte mich möglichst gut vorbereiten.
Danke


----------



## Pauli99 (30. Mai 2015)

Danke für die Info.
Habe den Schnitzer ausgebessert.


----------



## Saheeda (30. Mai 2015)

Hi,

du könntest auch die Bedingung der while-Schleife leicht abändern und stattdessen innerhalb abfragen, ob eine Zahl gültig ist, oder nicht:


```
boolean gueltig = true;

do{
	System.out.println("Bitte geben Sie ihre " + nr + " Note ein: ");
        note = in.nextFloat();
			
	if(note <= 5){
		summe += note;
		nr++;
	} else {
		gueltig = false;
	}
} while(gueltig)
```

Ansonsten:
Warum gibt es eine Variable notenanzahl und eine Variable nr? Was ist der Unterschied zwischen beiden und wo verwendest du nr? (Oder ich habs übersehen...)
Ich würde notenanzahl am Anfang nicht auf 1 setzen, sondern auf 0. Du ziehst überall, wo die Variable verwendet wird, eh wieder 1 ab.


----------



## Pauli99 (30. Mai 2015)

Vielen Dank,
aber leider haben wir den boolean-Ausdruck in der Schule noch nicht durchgemacht.
Gibt es noch eine andere Möglichkeit? Ich komme leider echt nicht drauf.:bahnhof:


----------



## Saheeda (30. Mai 2015)

Rein logisch würde auch das hier funktionieren, aber es wäre halt "doppelt-gemoppelt" und nicht ganz so schön:


```
do{ 
 
            System.out.println("Bitte geben Sie ihre " + nr + " Note ein: ");
            note = in.nextFloat();
 
           if(note <= 5){
                 notenanzahl++;
                 summe = summe + note;
                 nr++;
            }
 
        }while( note <=5);
```


----------



## Pauli99 (30. Mai 2015)

Die Variable notenanzahl soll für die gesamte Anzahl der Noten stehen. 
Wobei nr für die einzelnen Abfragen der Noten stehen soll.


----------



## Pauli99 (30. Mai 2015)

Werde mit deinem letzten Tipp morgen fortsetzen.
Vielen Dank nochmal


----------



## Pauli99 (31. Mai 2015)

Pauli99 hat gesagt.:


> Vielen Dank,
> aber leider haben wir den boolean-Ausdruck in der Schule noch nicht durchgemacht.
> Gibt es noch eine andere Möglichkeit? Ich komme leider echt nicht drauf.:bahnhof:


Habe nochmal in meine Unterlagen nachgeschaut, wir haben vor einiger Zeit den boolean-Ausdruck
durchgemacht.  
 Danke für deine Hilfe. Mit der boolean-Anweisung läuft das Programm jetzt.:toll: Danke für deine Unterstützung!!!!


----------



## Dompteur (31. Mai 2015)

Was macht das Programm eigentlich, wenn deine erste Eingabe "6" ist ?


----------



## Pauli99 (31. Mai 2015)

Wenn die erste Zahl größer ist als 5, schreibt die Konsole : "Der Schnitt ist NaN (Not a Number)".


----------



## Robinson97 (31. Mai 2015)

Das kommt daher das dein Deine Summe null ist und du veruchst durch null zu teilen.


----------



## Robinson97 (31. Mai 2015)

Du könntest um das zu umgehen folgendes versuchen:

```
[COLOR=#000000]
 durchschnitt = summe / (notenanzahl - 1);
        
        if (Double.isNaN(durchschnitt)) {
            System.out.print("Die Eingabe war fehlerhaft !");
        }
        else{
        System.out.println("Sie haben " + (notenanzahl - 1 ) + " Noten eingeben. Der Schnitt beträgt: " + durchschnitt );
        }
[/COLOR]
```


Dadurch überprüfst du deine Variabel durchschnitt auf die Gültigkeit und wenn sie ungültig ist gibt er eine Fehlermeldung aus


----------



## Pauli99 (5. Jun 2015)

Ich habe das Programm mit eurer Hilfe lösen können. Danke:applaus::toll:
Jetzt möchte ich gerne mein Thema als erledigt abschließen.
Ich kann allerdings nirgends, den Im FAQ beschriebenen 
(http://www.java-forum.org/forum-faq-beitraege/86306-thema-erledigt-markieren.html ), 
Thema-erledigt-Button finden.
Wo hat sich dieser Schlingel versteckt?
Danke!
Mit vielen Grüßen Pauli99


----------

