# Integer addieren



## Spin (26. Okt 2008)

Aufgabe 1 — Integer addieren

Schreiben Sie ein Programm, das Integer addiert, die vom Benutzer eingegeben werden. Das Programm fragt zuerst wie viele Zahlen addiert werden sollen. Danach fordert das Programm den Benutzer auf die Zahlen nacheinander einzugeben. Schließlich gibt es das Ergebnis auf den Bildschirm aus.

    Wie viele Integer sollen addiert werden:
    5
    Geben Sie einen Integer ein:
    3
    Geben Sie einen Integer ein:
    4
    Geben Sie einen Integer ein:
    -4
    Geben Sie einen Integer ein:
    -3
    Geben Sie einen Integer ein:
    7

    Die Summe ist 7

Achten Sie darauf, nicht die Anzahl der zu addierenden Integer (im Beispiel 5) zur Summe zu addieren. 




Hallo Leute , ich habe mich mal kurz versucht, komme aber nicht weiter. :/



```
int zahl;
      int x =0;
      BufferedReader Eingabe = new BufferedReader
        (new InputStreamReader(System.in));
      
      
    
      
      System.out.println("Wieviele Zahlen sollen addiert werden?");
      zahl = Integer.parseInt(Eingabe.readLine());
      
      if ( x < zahl)
          
          System.out.println("Geben Sie einen Integer ein:");
          zahl = Integer.parseInt(Eingabe.readLine());
```




Ich weiß nicht wie ich eine Schleife die Anweisung geben soll, System.out zu wieder holen.

Kann mir da mal bitte jemand einen Anschubser geben, danke gruß spin


----------



## SlaterB (26. Okt 2008)

Zeile 14 und 15 sind dein Eingabecode,
darum muss in Zeile 13 und 16 die for-Schleife,

wenn du noch gar keine Schleife kennst, dann schaue dir erst ein Beispiel in deinem Lehrbuch oder bei google an,

Zeile 12 ist bisher eher ohne Funktion, und ohne Klammern bezieht sich so ein if übrigens nur auf einen weiteren Befehl,
deine Einrückung hat keine Bedeutung

es wird dir übrigens nichts bringen, die eingegebenen Zahlen alle in der Variablen zahl zu speichern, du brauchst ein Array


----------



## Schandro (26. Okt 2008)

warum brauch er ein Array dazu? Es geht doch auch so:

```
int gesamtZahl = 0;

for(int i=0;i<zahl;++i){
   gesamtZahl  = gesamtZahl + Integer.parseInt(Eingabe.readLine());
}
```

@Spin
Musst natürlich noch ein paar System.out.printlns dazuschreiben, aber im Grunde isses das


----------



## Spin (26. Okt 2008)

Danke , ich versuche mich gleich mal. 

Habe noch schnell ne andere Aufgabe gelöst.
Bin dabei mir ständig andere Aufgaben zu nehmen und die zu lösen, damit ich sicherer werde in dem primitiven Programmieren, bevor ih zu Objekten weitergehe.


Schwireigkeiten macht mir bisher nur die while schleife.


----------



## Fu3L (26. Okt 2008)

Spin hat gesagt.:
			
		

> Schwireigkeiten macht mir bisher nur die while schleife.



Was genau bereitet dir denn an der while-schleife Probleme? Vllt können wir ja helfen...

Ich mochte die while-schleife eigentlich immer am liebsten, weil die aus meiner Sicht die einfachste und intuitivste ist.


----------



## Schandro (26. Okt 2008)

> Bin dabei mir ständig andere Aufgaben zu nehmen und die zu lösen, damit ich sicherer werde in dem primitiven Programmieren, bevor ih zu Objekten weitergehe.


Guter Vorsatz  :toll: 

Was verstehsten du nicht an der while-Schleife? vllt. können wir dir da weiterhelfen.


----------



## Spin (26. Okt 2008)

Ja 


Ich versuche mal zu erklären.

Ich hatte mal gelesen, dass man für gleiche Situationen auch verschiedene Schleifen benutzen kann.


Das heißt : For , if und while Schleife ----> die den gleichen Ausdruck beschreiben.

Ich kann von mir behaupten das ich die while schleife verstehe , aber ich kann sie nicht anwenden . Das ist quasi mein Problem.


Ein Bsp.:


double zahl ;
int    zehntel  = 0;
int    inkrement     = 1;          

while ( zehntel  <= 100 )   
{
  zahl  = zehntel/10.0 ;    

  System.out.println( "Zahl:" + zahl );
  zehntel =  zehntel + inkrement ;
}
System.out.println( "Fertig");



Kann mir mal kurz einer erklären, warum ich hier mein Zehntel initialisieren muss. Damit die while Schleife einen Startpunkt hat?



Neben bei: kann mir mal noch jemand durch ein kurzes Bsp zeigen wie ich ein int zum double mache.


Ich lese bsp: Integer ein , brauche aber bei Math.sin (double a)
Muss man dann die Eingabe ändern , quasi : Double.parseDouble oder reicht es wenn man in der  Formel double davorschreibt ?

Bei mir zeigt er immer nen Fehler


----------



## Fu3L (26. Okt 2008)

Bezüglich des Castens: 
Von int zu double kann der Compiler automatisch casten, also wenn du sin(integer) schreibst, macht der automatisch ein double draus. Andersrum musst du aber dem Compiler mitteilen, dass dir bewusst ist, wenn du ein double in ein int umwandelst, dass dir dabei Nachkommastellen verloren gehen könnten oder dass die doueble-variable unter Umständen nicht mehr in den Wertebereich von int passt. Das machst du indem du (int) vor die Zahl setzt:


```
int ergebnis = methodeDieEinIntErwartet((int) eineDoubleVariable);
```

Die while-schleife würd ich dir gerne auch noch erklären, seh aber grad, dass ich gleich weg muss  :roll:


----------



## Schandro (26. Okt 2008)

> Kann mir mal kurz einer erklären, warum ich hier mein Zehntel initialisieren muss. Damit die while Schleife einen Startpunkt hat?



Versteh nich so ganz dein Problem. Was meinst du mit Startpunkt?


Wenn du in der Zeile
while ( zehntel <= 100 ) 

auf zehntel zugreifst, dieses aber noch überhaupt keinen Wert hat, kommt eine NullPointerException. Anders ist es bei zahl, da wird zuerst ein Wert zugewiesen bevor es benutzt wird.

Wenn zehntel am Anfang z.b. den Wert 101 hätte, würde die Schleife kein einziges mal durchlaufen


----------



## Spin (26. Okt 2008)

Aufgabe :
Aufgabe 1 — Discountpreise

Während einer Sonderaktion wird ein Rabatt von 10% auf alle Einkäufe mit einem Gesamtbetrag von mehr als $10.00 gewährt. Schreiben Sie ein Programm, das nach dem Gesamtbetrag fragt und den Discountpreis berechnet. Der Gesamtbetrag wird in Cent (als Ganzzahl) eingegeben.

    Geben Sie den Gesamtbetrag ein:
    2000
    Discountpreis: 1800

Verwenden Sie Ganzzahl-Arithmetik.

Zurück zum Inhaltsverzeichnis.




```
public class Discountpreise
{
  public static void main (String[] args)  throws IOException
  { 
      BufferedReader Eingabe = new BufferedReader(new InputStreamReader(System.in));

      
     double Gesamtbetrag;
           
              
     System.out.println("Geben Sie den Gesamtbetrag ein:");
     Gesamtbetrag = Double.parseDouble(Eingabe.readLine());
     
      if (Gesamtbetrag >=10)
          
          System.out.println("Discountpreis:" +(Gesamtbetrag - (Gesamtbetrag * 0.10)));

      else
          System.out.println("Leider kein Rabatt möglich, Endsumme:" + Gesamtbetrag);
      
      
      
      
  }
}
```


Kann man hierfür auch eine for oder while schleife nehmen , oder sind das nur rein Zählschleifen. Das heißt , nehme ich die nur wenn ich etwas höher zählen will oder niedriger.


Weiter Frage , kann ich if schleifen immer durch switch und case ersetzen ?
Das versuche ich mal bei dieser Aufgabe.




```
else
       {
         switch (Gesamtbetrag){
              
              
              default: System.out.println("Leider kein Rabatt möglich, Endsumme:" + Gesamtbetrag);
       }
       }
      
  }
}
```


Edit:

Die switch anweisung kann keine Bdingung fordern. Deswegen denke ich mal, das man deshalb nur beides zusammen verwenden kann,....jedoch nicht ersetzbar füreinander.


----------



## Ravendark (26. Okt 2008)

> Weiter Frage , kann ich if schleifen immer durch switch und case ersetzen ?
> Das versuche ich mal bei dieser Aufgabe.


If-Abfragen (das sind keine schleifen :! hängen immer von einer Bedingung ab, die einen boolschen Wert liefert. 
Entsprechend diesem boolschen Wert wird verschiedener Programmcode ausgeführt.


> das man deshalb nur beides zusammen verwenden kann,....jedoch nicht ersetzbar füreinander.


Man kann switch-case-Verzweigungen auch einzeln einsetzen...mit dem letzten Teil hast du aber recht.


Übrigens, while-Schleifen müssen nicht zwingend was mit zählen zu tun haben:

```
System.out.println("Berechnung: x/y");
System.out.print("x = ");
double x = In.readDouble();
System.out.print("y = ");
double y = In.readDouble();
while(y == 0)  // solange y == 0 ist wird der Schleifenkörper ausgeführt
{
  System.out.println("Fehler, Divisior muss ungleich 0 sein!");
  System.out.print("y = ");
  y = In.readDouble();
}
System.out.println("Ergebnis: "+(x/y));
```



Zu deiner Discount-Aufgabe: 
Beachte die Aufgabenstellung! 
- Ganzzahl-Arithemtik: also hat double hier nix zu suchen
- Der Preis wird in Cent eingelesen (1 Euro --> 100 Cent)

eigentlich ist nur ne if-Abfrage und eine kleine Berechnung nötig um die Aufgabe zu lösen...probier mal :wink:


----------



## Spin (26. Okt 2008)

```
{
      int summe =0;
      int zahl = 1;
      String zeile;
      BufferedReader Eingabe = new BufferedReader
        (new InputStreamReader(System.in));
      
      
    
      
      System.out.println("Wieviele Zahlen sollen addiert werden?");
      zahl = Integer.parseInt(Eingabe.readLine());
      
      while ( zahl < 5)
      {
          System.out.println("Geben Sie einen Integer ein:");
          zeile = Eingabe.readLine();
          zahl = Integer.parseInt(zeile.trim());
          summe = summe + zahl;
            
         zahl = zahl+1;
      }
          System.out.println( "Gesamtsumme: " + summe );



    
    
  }}
```



Ich habe was gefunden , womit ich endlich System.out wiederholen lasse.
Doch stimmt mein code nicht ganz , denn  die Beziehung ziwschen Meine Anfrage und Ausgabe stimmt nicht.

Ich möchte 5 zeilen addieren aber er addiert 6.

Andersrum soll ich bestimmen , wieviele Zeilen ich addieren möchte. Brauch ich ne If anweisung?


----------



## Ravendark (26. Okt 2008)

Ich weiß nicht inwiefern du dich mit Schleifen auskennst:

```
public class Addieren
{
  public static void main(String[] args)
  {
    int anzahl, temp, summe = 0;
    System.out.print("Wieviele Integer sollen addiert werden?  ");
    anzahl = In.readInt();
    for(int i = 0; i < anzahl; i++)
    {
      System.out.print("Integer eingeben: ");
      temp = In.readInt();
      summe = summe + temp;
    }
    System.out.println("Ergebnis: "+summe);
  }
}
```
Kannst du mit dem Code was anfangen?
PS: Mann kann das aber auch mit einer while-Schleife lösen...


----------



## Spin (27. Okt 2008)

Jepp, ich kenne alle Arten von Schleifen und auch Arrays. Bloß mir fehlt die Anwendung, aber mit euch zusammen wird mir das immer klarer , wie man was anwendet 


Bloß dein Einlese Verfahren verstehe ich nicht 

Ich kenne entweder : Scanner eingabe = new Scanner(System.in)

oder : Buffered Reader eingabe = new BufferedReader(new InputStreamReader(System.in)



Was ich noch nicht ganz verstehe , warum sich nun die Ausgabe wiederholt. Dein I ist doch garnicht in der Ausgabe mit drin. 

Kannst du mir das nochmal kurz erklären?






```
public class Addieren1
{
  public static void main(String[] args)
  {
   
      Scanner sc = new Scanner(System.in);
   
 
      
      
      int anzahl, temp, summe = 0;
    System.out.print("Wieviele Integer sollen addiert werden?  ");
    anzahl = sc.nextInt();
    for(int i = 0; i < anzahl; i++)
    {
      System.out.print("Integer eingeben: ");
      temp = sc.nextInt();
      summe = summe + temp;
    }
    System.out.println("Ergebnis: "+summe);
  }
}
```


----------



## Ravendark (27. Okt 2008)

Sorry, die Einlesemethoden kommen aus der In.class (kann man sich downloaden) die in meinem Classpath liegt. Diese Einlesemethoden sind meiner Meinung nach etwas komfortabler als die mit BufferedReader, aber egal :wink: 

Die Ausgabe wiederholt sich aufgrund der for-Schleife (Zählschleife):

1. die for-Schleife wird zum ersten mal betreten
2. die Zählvariable i wird mit dem Wert 0 initialisiert
3. jetzt wird geprüft ob der aktuelle Wert von i kleiner als die Anzahl der Integer ist, die eingelesen werden sollen
4. wenn dieser Vergleich true ergibt, wird der Schleifenkörper ausgeführt
5. i++ bedeuted das nach dem Ende des Blocks i um eins erhöht wird
6. bei 3. gehts wieder los

Konkretes Bsp (Bitte am besten parallel in der Code schauen :wink: ):
- zu addierende Integer: 3
- for-Schleife wird zu ersten Mal betreten: i = 0
- i < 3 == true
- Schleifenkörper wird ausgeführt: 1. Integer wird eingelesen und zur summe addiert
- am Ende des Schleifenkörpers wegen i++: i = 1
- i < 3 == true
- Schleifenkörper wird ausgeführt: 2. Integer wird eingelesen und zur summe addiert
- am Ende des Schleifenkörpers wegen i++: i = 2
- i < 3 == true
- Schleifenkörper wird ausgeführt: 3. Integer wird eingelesen und zur summe addiert
- am Ende des Schleifenkörpers wegen i++: i = 3
- i < 3 == false
- Schleife wird nicht nochmal ausgeführt

hoffe das ich es verständlich erklärt hab ^^


Das i brauchen wir in diesem Fall nur um zu gewährleisten das auch so viele Integer eingelesen werden, wie eingegeben wurde.
Wie gesagt kann man das auch mit einer while-Schleife lösen.

PS: der Code mit "richtiger" Einlesemethode:

```
import java.io.*;

public class Addieren
{
  public static void main(String[] args) throws IOException
  {
    int anzahl, temp, summe = 0;
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Wieviele Integer sollen addiert werden?  ");
    anzahl = Integer.parseInt(stdin.readLine());
    for(int i = 0; i < anzahl; i++)
    {
      System.out.print("Integer eingeben = ");
      temp = Integer.parseInt(stdin.readLine());
      summe = summe + temp;
    }
    System.out.println("Ergebnis: "+summe);
  }
}
```


----------



## Spin (28. Okt 2008)

Danke dir , solangsam sehe ich durch 


For schleife schein auch ganz einfach zu sein 

Danke nochmals


----------



## Spin (28. Okt 2008)

Danke dir , solangsam sehe ich durch 


For schleife schein auch ganz einfach zu sein 

Danke nochmals


----------



## Spin (28. Okt 2008)

Dankeschön, for schleifen scheinen doch nicht so schwer zu sein 

Ärger mich gerade mit nen neuen Problem rum. *grml*


----------



## Spin (28. Okt 2008)

Dankeschön, for schleifen scheinen doch nicht so schwer zu sein 

Ärger mich gerade mit nen neuen Problem rum. *grml*


----------



## Spin (28. Okt 2008)

Danke, klappt wohl doch jetzt mit der for schleife


----------



## Spin (28. Okt 2008)

Danke,


for schleifen sind doch nicht o schwierig, doch machen sie mir noch probleme bei feldern.

danke


----------



## Spin (28. Okt 2008)

Danke, for schleifen sind ja doch nicht so schiwerig^^

Habe aber schon neue Herausforderungen an dennen ich hängen bleibe.

Man könnte ein Thrad, spin'S Probs aufmachen


----------



## Spin (28. Okt 2008)

Danke, die for schleife ist doch nicht so schwer.


Hab bloß schon wieder andere Probleme


----------

