# Zahlen eingeben



## Stimo89 (23. Mai 2012)

hallo zusammen

das ist mein erstes mal hier im forum. Ich bin seit August letztes Jahr Informatik Lehrling und habe seit August das erste mal mit Java gearbeitet, also zu erst mit JavaKara und jetzt mit Eclipse. Ich muss zugeben das ich mich bis jetzt wenig mit Java beschäftigt habe und darum noch sehr unerfahren dabei bin. 
Ich habe letzte Woche einige Übungen bekommen die ich versuchen sollte zu lösen. Nun da ich eben mich zu wenig damit beschäftigt habe weiss ich nicht weiter oder besser wie ich die eine Übung lösen kann.

Die Übung sagt folgendes:
Geben sie 10 ganze Zahlen im positiven oder negativen Bereich ein:
5, 15, -20, 33, -10, -5, 45, 25, 12, -60
Am Ende wird die Summe der positiven und negativen Zahlen ausgegeben:
pos. 135     neg. -95

Tipp:
Nach der Eingabe jeder einzelnen Zahl wird zur jeweiligen Summe direkt addiert. Die 10 Zahlen müssen nach Ablauf des Programms nicht mehr verfügbar sein.

Ich sollte es mit einer for-schleife lösen.

Ich habe bis jetzt dies geschrieben, aber ich denke ich bin auf dem falschen Weg.



	public static void main(String[] args) {
		System.out.println("Gebe 10 positive und negative Zahlen ein: ");
		Scanner eingabe1 = new Scanner(System.in);
		int zahl1 = eingabe1.nextInt();
		int zahl2 = eingabe1.nextInt();
		int zahl3 = eingabe1.nextInt();
		int zahl4 = eingabe1.nextInt();
		int zahl5 = eingabe1.nextInt();

			for (int w=1; w<=zahl1; w++){;
				System.out.println(zahl1 + zahl2 + zahl3 + zahl4 + zahl5);

	}
  }
}


noch was, wenn ich hier im falschen Forum Bereich bin, sagt mir das. danke!


----------



## Deros (23. Mai 2012)

code immer in javatags also so:


```
public static void main(String[] args) {
System.out.println("Gebe 10 positive und negative Zahlen ein: ");
Scanner eingabe1 = new Scanner(System.in);
int zahl1 = eingabe1.nextInt();
int zahl2 = eingabe1.nextInt();
int zahl3 = eingabe1.nextInt();
int zahl4 = eingabe1.nextInt();
int zahl5 = eingabe1.nextInt();

for (int w=1; w<=zahl1; w++){;
System.out.println(zahl1 + zahl2 + zahl3 + zahl4 + zahl5);

}
}
}
```


----------



## Paddelpirat (23. Mai 2012)

Wieso ignorierst du direkt beim ersten Versuch den Tipp, der dir gegeben wird?


----------



## nillehammer (23. Mai 2012)

Ja, komplett auf dem Holzweg. Versuche, den Aufgabentext in Teilschritte zu zerlegen, die Du dann in Code gießt. Dazu musst Du die Aufgabe auch etwas genauer lesen.
1. Zahlen einlesen: Kannst Du mit 10 Variablen machen, aber hier hast Du wiederkehrenden Code, eine Schleife bietet sich an. Eine Abbruchbedingung hast Du auch, nämlich 10 eingelesene Zahlen.
2. Die Summen: Hier steht, Du sollst jeweils die positiven und die negativen Zahlen addieren, nicht alle zusammen. Weiters steht, dass die Eingaben egal sind, nur die Summen sind wichtig. Hört sich nach *zwei* (und nicht 10) Variablen an, die Du Dir merken musst, eine für die positive Summe, eine andere für die negative Summe.
2a) Du musst offensichtlich erkennen, zu welcher der beiden Variablen Du addieren musst. Hier hast du eine Fallunterscheidung (Stichwort *if*).

Ergo: mit drei Variablen (zwei für die Summen, eine für die aktuelle eingabe), einer for-Schleife und darin einer if-Verzweigung kann man das Problem lösen. Scanner und System.out.println hast Du übrigens richtig verwendet.


----------



## ARadauer (24. Mai 2012)

mit einer for schleife macht man etwas öfter.. das ist dazu dar dass du nicht 10 mal die zahl einlesen musst... also mach dir eine summe mit 0 ausserhalt der vor schleife, innerhalt der vorschleife ließt du dann die zahl ein und addierst sie zur summe, nach der vor schleife gibts du die summe aus..


----------



## Stimo89 (24. Mai 2012)

jungs ich hab euch gesagt ich bin ein noob, aber ich möchte es sicher verstehen.
ist das untere soweit richtig?
ich weiss dann nicht was ich mit der for-schleife anfangen muss.


```
System.out.println("Gebe 10 positive und negative Zahlen ein: ");
		Scanner eingabe1 = new Scanner(System.in);
		int pos = eingabe1.nextInt();	
		
		Scanner eingabe2 = new Scanner(System.in);
		int neg = eingabe2.nextInt();
		
		Scanner eingabe3 = new Scanner(System.in);
		int akteing = eingabe3.nextInt();
```


----------



## nillehammer (24. Mai 2012)

> jungs ich hab euch gesagt ich bin ein noob, aber ich möchte es sicher verstehen.
> ist das untere soweit richtig?
> ich weiss dann nicht was ich mit der for-schleife anfangen muss


Ok, dann Schrittweise. Fangen wir erstmal mit dem Einlesen an.
1. Du brauchst nur den Scanner _eingabe1_ ganz am Anfang. Lösche die anderen und verwende nur den ersten. Das hattest Du am Anfang schon richtig.
2. Wenn Du Dir Deinen Code unten anschaust, wird Dir sicherlich auffallen, dass Du drei Mal praktisch dasselbe machst: 
	
	
	
	





```
int pos = eingabe1.nextInt();
```
 Hier liest Du eine Eingabe und weist sie einer Variablen zu. Für Deine Aufgabe würdest Du das ganze 10 Mal machen müssen. Versuche im ersten Schritt, das mal in eine for-Schleife zu gießen, die 10 Mal durchlaufen wird. Und post den Code. Dann machen wir weiter...


----------



## Stimo89 (24. Mai 2012)

```
for (int w=0; w<10; w++){;
```

???


ich galub ich verstehe die for schleife nicht ganz. ich habs jetzt ein paar versuche gemacht aber nix.


----------



## timbeau (24. Mai 2012)

Jo, schau dir mal Schleifen in der Grundform an. 

Galileo Computing :: Java ist auch eine Insel – 2.6 Schleifen

Dann brauchst du 2 Zähler, für negative und positive Zahlen. 

Aber bevor wir hier weitermachen können, musst du die absoluten Grundgerüste von Java kennen.


----------



## Stimo89 (24. Mai 2012)

habs durchgelesen


----------



## timbeau (24. Mai 2012)

und jetzt wartest du auf die Lösung? ....

HF.....

2 Zähler, funktionierende for-Schleife, 1 Scannerobjekt....

was hast du bereits davon?


----------



## Stimo89 (24. Mai 2012)

```
System.out.println("Gebe 10 positive und negative Zahlen ein: ");
        Scanner eingabe1 = new Scanner(System.in);
        int pos = eingabe1.nextInt();
        
			for (int i=1; i<=10; i++){;
				System.out.print(i);
```


----------



## timbeau (24. Mai 2012)

Es fehlen noch die beiden Zähler. Das Semikolon direkt nach der for-Schleife macht man nicht, es fehlt in deinem Code auch eine "}"

Überleg dir mal wie du es auf Papier machewn würdest, wenn dir ein Kumpel 10 Zahlen sagt und du die positiven addieren musst und die negativen...


----------



## nillehammer (24. Mai 2012)

```
eingabe1.nextInt();
```
Das ist doch das, was sich 10 mal wiederholen soll. D.h. das muss natürlich *in* die for-Schleife. Die Deklaration 
	
	
	
	





```
int pos;
```
 außerhalb ist dagegeb richtig.

@timbeau: Lass uns jetzt bitte erst mal die for-Schleife mit der Eingabe der 10 Zahlen machen, bevor wir die Zähler und den Rest einbauen.


----------



## Stimo89 (24. Mai 2012)

```
public static void main(String[] args) {
		System.out.println("Gebe 10 positive und negative Zahlen ein: ");
        Scanner eingabe1 = new Scanner(System.in);
        int pos = eingabe1.nextInt();
        
			for (int i=1; i<=10; i++){
				System.out.print("Zahl eingeben: " );
				pos = eingabe1.nextInt();
	}
  }
}
```


----------



## timbeau (24. Mai 2012)

Jo! Sieht gut aus. Jetzt erstmal int pos; statt int pos = ....

Die Eingabe findet in der Schleife statt, so würde sie 11x stattfinden. 1x vor der Schleife und 10x in der Schleife. 

Jetzt die Weiterverarbeitung von pos. 


```
if(pos ???) {
dann mache das
}
else {
mache dies
}
```


----------



## Stimo89 (24. Mai 2012)

```
public static void main(String[] args) {
		System.out.println("Gebe 10 positive und negative Zahlen ein: ");
        Scanner eingabe = new Scanner(System.in);
 
        int zahl;
			for (int i=1; i<=10; i++){
				System.out.print("Zahl eingeben: " );
				zahl = eingabe.nextInt();

	}
			if (zahl > 

  }
			System.out.print("Summe positiv: " + );
 }
```


----------



## JaninaSt (24. Mai 2012)

Du kannst dir noch zwei int anlegen, zum Beispiel int pos und int neg und beide mit 0 initialisieren.
Das ist dann für deine zwei Endergebnisse, also einmal die Summe der positiven, wie auch den negativen Zahlen. 

Und dann kannst du in der if-Abfrageabfragen ob deine eingelesene Zahl > 0 ist, wenn ja zählst du das eingelesen immer zu pos dazu, ansonsten (else) zu neg.

Und wenn die for-Schleife durchgelaufen ist, kannst du die beiden Integer ausgeben lassen.


----------



## nillehammer (24. Mai 2012)

Und auch hier wieder: Die Überprüfung und das zuaddieren zur richtigen Variable (pos oder neg) muss auch für jede eingegebene Zahl gemacht werden, also gehört auch das in die for-Schleife und nicht dahinter. Die Ausgabe der Endergebnisse muss dann nur einmal gemacht werden, das gehört dann also hinter die for-Schleife (Hast Du ja schon angefangen).


----------



## Stimo89 (24. Mai 2012)

```
public static void main(String[] args) {
		System.out.println("Gebe 10 positive und negative Zahlen ein: ");
        Scanner eingabe = new Scanner(System.in);
 
        int zahl , pos=0, neg=0;
			for (int i=1; i<=10; i++){
				System.out.print("Zahl eingeben: " );
				zahl = eingabe.nextInt();

			
			if (zahl > 0){
				zahl = pos;
			}
			else if (zahl < 0){
				zahl = neg;
			}

 }
}
}
```


----------



## JaninaSt (24. Mai 2012)

Es reicht nur else, statt else if. Weil wenn die Zahl nicht größer 0 ist, muss sie eh automatisch negativ sein. Das brauchst nicht nochmal prüfen.


----------



## JaninaSt (24. Mai 2012)

Und du willst ja nicht Zahl = pos zuweisen.... Da hättest du ja immer Null.
Du liest die Zahl ein und musst je nachdem ob positiv oder negativ, die aktuell eingelesen Zahl zu pos oder neg dazuzählen.

Überleg dir wie du es händisch rechnen würdest.


----------



## timbeau (24. Mai 2012)

Mensch, was ist das denn für ne Denkweise bei dir? Salamischeibchen-Code, je nachdem was grade hingeworfen wird. Du kannst doch mal 6 Zahlen dahinschreiben und die zusammenaddieren. Testen, prüfen usw. 

Hier Zeile für Zeile ohne Sinn & Verstand und vor allem ohne Kommentar zu posten   :noe:


----------



## nillehammer (24. Mai 2012)

```
zahl = pos;
```
 Das ist genau falsch rum. In Java steht links immer die Variable, die einen Wert bekommen soll und rechts der Wert/die Variable mit dem Wert, der zugeweisen werden soll. Und noch ein Tipp: Für das Dazuaddieren und Zuweisen gibt es in Java einen kurz geschriebenen Operator 
	
	
	
	





```
+=
```


----------



## Stimo89 (24. Mai 2012)

hey jungs, ich kanns nicht. vielleicht hilft es mir wenn man mir die Lösung hinschreibt. sobald ich das if nach dem else wegnehme wird mir in ecplise einen fehler angezeigt. ich gibs auf.


----------



## JaninaSt (24. Mai 2012)

Bei else darfst dann nichts mehr in Klammer schreiben.


```
if(zahl >= 0){
  ...
}else{
  ...
}
```

Wenn die Zahl positiv ist wird das nach der if-Abfrage, sonst dass nach dem else ausgeführt.


----------



## timbeau (24. Mai 2012)

```
int posZaehler = 0;
int negZaehler = 0;
int eingabe;
Scanner scanner = new Scanner(System.in);
for(.....) {
eingabe = scanner.nextInt();
if(eingabe >= 0) {
posZaehler += eingabe;
}
else {
negZaehler += eingabe;
}
}
//Print.out
```

BTW: Klammernsetzung sollte man beherrschen, das ist ja sicherlich nicht die erste Aufgabe


----------



## Stimo89 (24. Mai 2012)

ach got ist das einfach! *schämm*


```
public static void main(String[] args) {
		System.out.println("Gebe 10 positive und negative Zahlen ein");
        int zahl; 
        int pos=0; 
        int neg=0;
		Scanner eingabe = new Scanner(System.in);
			for (int i=1; i<=10; i++){
				System.out.print("Zahl eingeben: " );
				
				zahl = eingabe.nextInt();			
			if (zahl >= 0){
				pos += zahl;
			}
			else{
				neg += zahl;
			}			
			}			
			System.out.println("Summe positiv: " + pos);
			System.out.println("Summe negativ: " + neg);
}
}
```


----------



## nillehammer (24. Mai 2012)

Stimo89 hat gesagt.:
			
		

> ach got ist das einfach! *schämm*


Habbich doch gleich gesagt   . Zitat aus meiner ersten Antwort: "Ergo: mit drei Variablen (zwei für die Summen, eine für die aktuelle eingabe), einer for-Schleife und darin einer if-Verzweigung kann man das Problem lösen."


----------



## Stimo89 (24. Mai 2012)

bin ich bei der Aufgabe richtig dran?

Aufgabe
Ein Zufallszahlen-Generator erzeugt 100 Zahlen von 1 bis 6. Ermitteln Sie, wie oft die Zahlen jeweils vorkommen. Geben Sie die Anzahl gewürfelter Einer, Zweier, Dreier, Vierer, Fünfer und Sechser aus.



Tipp:
Generieren Sie mittels einer For-Schleife die 100 Zufallszahlen. Innerhalb
der For-Schleife prüfen Sie, welche Zahl erzeugt wurde und zählen sie direkt zur jeweiligen Anzahl dazu. Die 100 Zufallszahlen müssen nach Ablauf des
Programms nicht mehr verfügbar sein.


Einer: 15
Zweier: 15
Dreier: 18
Vierer: 15
Fuenfer: 20
Sechser: 17


```
public static void main(String[] args) {

		int zahl1, zahl2, zahl3; 
		int eingabe = 0;

		for(int i=0; i<1; i++){
        zahl1=(int)(Math.random() * (100 - 1) + 1);
		System.out.println("einer: " + zahl1);
        zahl2=(int)(Math.random() * (100 - 1) + 1);
		System.out.println("zweier: " + zahl2);
        zahl3=(int)(Math.random() * (100 - 1) + 1);
		System.out.println("dreier: " + zahl3);
		}

	}

}
```


----------



## nillehammer (24. Mai 2012)

Sach ma Stimo89, kannst du lesen und das Gelesene auch verstehen? Wieviele Zufallszahlen sollen erzeugt werden?


----------



## Atze (24. Mai 2012)

Stimo89 hat gesagt.:


> ```
> for(int i=0; i<1; i++)
> ```


vote 4 geilste for-schleife ever!


----------



## timbeau (25. Mai 2012)

A fool with a tool is just a fool. 

Will sagen: "Java löst für dich keine Probleme"

1. Schritt ist der Algorithmus auf dem Zettel. 

Wenn die Aufgabe ist, 100 Zahlen zu generieren, witfst du dann 3 Würfel 1x (oder auch keinmal) und der 1. Würfel ist ein Einer???

Erst denken, dann proggen


----------

