# Programm durch eingabe von einer "0" beenden...



## Dgaz (23. Feb 2011)

Tag leute,

Die aufgabe lautet, dass ich ein Programm erstelle das von einer Beliebigen zahl anfängt hoch zu zählen.
Das ist ja kein Problem. Jedoch soll , wenn ich die zahl 0 eingebe , alles gestopt bzw beendet werden.
Und zum schluss soll ein durschnittswert ausgegeben werden.

Nur ich kriege das mit der 0 nicht hin.
Könnt ihr mir ein paar Tipps geben wie ich diese sachen angehen kann, bin echt am verzweifeln....

Gruß
DGaz

edit: 
	
	
	
	





```
import java.util.Scanner;
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 23.02.2011
  * @author
  */

public class Abbruch {

  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  System.out.println("Welche Zahl soll addiert werden");
  int i;
  for (i=sc.nextInt(); i < 10; i++) {


       System.out.println(i);

  }

  }
}
```


----------



## w0ddes (23. Feb 2011)

Erste Frage: Was hast du bisher? Bitte poste doch deinen Quelltext ( JAVA-Tags nicht vergessen! )


----------



## socialcocer (23. Feb 2011)

Ich nehme mal an, dass du via Console eine Zahl vom Benutzer einliest und dann hochzählst. Wenn du das bereits hast, verstehe ich dein Problem nicht. Eine einfache Überprüfung der Eingabe (in dem Fall = 0) würde doch schon ausreichen.


----------



## Dgaz (23. Feb 2011)

genau soweit bin ich ja, das hochzählen habe ich.
Aber wie bekomme ich das hin , dass wenn ich 0 drück schluss ist ?
weil wenn ich erst hochzählen lasse kann ich doch nicht 0 eingeben, erst wenn das hochzählen fertig ist kann ich doch etwas eingeben oder leige ich falsch ?


----------



## chalkbag (23. Feb 2011)

Du müsstest deine Eingabe kontrollieren, ob sie 0 ist, oder eben nicht und dann hochzählen.

In der Richtung


```
int i = sc.nextInt()
while (i != 0) {
  for (int j = 0; j <= i; j++) {

       System.out.println(j);
  }
  i = sc.nextInt()
 }
}
```


----------



## Mofi (23. Feb 2011)

Dgaz hat gesagt.:


> genau soweit bin ich ja, das hochzählen habe ich.
> Aber wie bekomme ich das hin , dass wenn ich 0 drück schluss ist ?
> weil wenn ich erst hochzählen lasse kann ich doch nicht 0 eingeben, erst wenn das hochzählen fertig ist kann ich doch etwas eingeben oder leige ich falsch ?



Nun soweit ich weiß, wirst du schon warten müssen, bis das hochzählen fertig ist.

Wenn ich deinen Quelltext sehe, zählt er bis 10 und beendet, dann das Programm?
Und warum schreibst du "addieren"? Hochzählen und addieren sind zwei verschiedene Dinge  (nicht bös gemeint)

Kann es sein, dass man laut der Aufgabenstellung immer wieder eine Zahl eingeben können soll, nachdem er hochgezähöt hat? Oder wirklich nur einmal und dann das Programm von alleine beenden?


----------



## Dgaz (23. Feb 2011)

dort steht "....solange addiert werden bis der Benutzer den Wert 0 eingibt..."
aber gemeint ist hochzählen.... aussage von meinem Lehrer 

@chalkbag
ich glaub du hast mich miss verstanden, also das Programm soll hochzählen... egal was ich am anfang eingeben.
Es soll nur sobald ich 0 drücke mit dem hochzählen aufhören...


----------



## chalkbag (23. Feb 2011)

Aso, entschuldige.

Wenn ich es jetzt richtig verstanden habe, dann brauchst du 2 Threads.

Nr1. schreibt in die Console 1-n
Nr2. wartet auf eine Eingabe in der Konsole und sobald der eine 0 bekommt, sagt er thread 1 das Schluss ist.

Anders wirst du das "gleichzeitige" Lesen und schreiben von der Console nicht realisieren können.

Hoffe jetzt hab ich es richtig verstanden.


----------



## Gonzo17 (23. Feb 2011)

Wie man gleichzeitig schreiben und lesen will, versteh ich immer noch nicht ganz. Zumal man ja mit Enter bestätigen müsste und während geschrieben wird, wird die Eingabe ja schon wieder überschrieben.

Hab mal was gefunden, vll kannste dirs ja mal anschauen wie die das gelöst haben und dann etwas ähnliches selbst realieren - sollte ja kein Hexenwerk sein: Java: Keylistener auf Konsolenebene / crusy.net


----------



## Dgaz (23. Feb 2011)

genau, nur ich weiß echt nicht wie ich das umsetzen soll, habe so etwas noch nie gemacht.
eine frage, kann man das hochzählen nicht im hintergrund laufen lassen ????
so das man ein aktives eingabe fenster hat wo mann jeder zeit die 0 eingeben kann, aber gleichzeitig hochgezählt wird ?


----------



## chalkbag (23. Feb 2011)

@Gonzo17

Das Problem hast du ja auch bei einen üblichen Consolen-Chat, wie ihn viele schon programmiert haben. Während du etwas schreibst, kann ja ein anderer Teilnehmer schon etwas geschrieben haben. 
Synchronisation ist dann natürlich noch ein Thema.


----------



## Tomate_Salat (23. Feb 2011)

Du könntest in einem Thread hochzählen, aber es einfach nicht anzeigen lassen. Wenn du [c]0[/c] eingibst, wird der thread beendet und das Ergebnis ausgegeben.


----------



## chalkbag (23. Feb 2011)

Dgaz hat gesagt.:


> genau, nur ich weiß echt nicht wie ich das umsetzen soll, habe so etwas noch nie gemacht.
> eine frage, kann man das hochzählen nicht im hintergrund laufen lassen ????
> so das man ein aktives eingabe fenster hat wo mann jeder zeit die 0 eingeben kann, aber gleichzeitig hochgezählt wird ?



Ich weiß jetzt nicht wie dein Wissensstand ist, aber Threads kennst du?

Erstell zwei Klassen welchen Runnable implementieren. In der run Methode definierst du was die 2 Threads jeweils machen sollen. Gestartet wird dann über .start().
Zusäztlich müsstest du ja Thread 1 noch sagen, wann schluss ist. Dies kannst du über eine setMethode mit entsprechender Schalter-Variable erledigen, welche du vor jedem System.out kontrollierst. Für echte Synchronisation müsstest du die Console synchronisieren und evtl. mit mutexen arbeiten (oder ein anderes object per synchronise befehl sperren).

Wie gesagt weiß nicht wie weit du bist, und kann so schwer sagen wie genau dieses Problem gelösst werden soll.


----------



## Dgaz (23. Feb 2011)

also, Threads  kenne ich ehrlichgesagt nicht....
wir hatten bisjetzt :Variablen, Bedingungen, Schleifen  und morgen kommen Arrays dazu....

wie kann ich am besten das hochzählen stoppen ?
mit einer if bedingung das in der for schleife ist ???


```
if (b=0) {
  break;
```


----------



## Tomate_Salat (23. Feb 2011)

Dgaz hat gesagt.:


> also, Threads  kenne ich ehrlichgesagt nicht....



Dann lass es bleiben und mach es so, wie deine Möglichkeiten es zulassen:


```
Scanner sc = new Scanner(System.in);
		
int i=0,next = -1;
		
while(next != 0) {
	i++;
    // System.out.println(i); 
	next = sc.nextInt();
}

// Hier die Auswertung
```

MFG

Tomate_Salat


----------



## Sonecc (23. Feb 2011)

Ich denke die Aufgabe wurde falsch verstanden.

Es ist wohl eher gefordert, dass der Benutzer dazu aufgefordert werden soll Zahlen einzugeben.
Wenn er eine 0 eintippt sollen die eingegebenen Zahlen ausgewertet werden, indem deren Durchschnitt errechnet wird.
Dafür braucht man natürlich die Summe und die Anzahl an Zahlen.

Es soll also nicht bei einer Eingabe von 3 auf 3 hochgezählt werden, sondern summe + 3 gerechnet werden.

Bsp.:

Eingabe: 1 -> Summe = 1;
Eingabe: 2 -> Summe = 3;
Eingabe: 6 -> Summe = 9;
Eingabe: 0 -> Durchschnitt = summe / anzahl = 9 / 3 = 3


----------



## Dgaz (23. Feb 2011)

Tomate_Salat hat gesagt.:


> Dann lass es bleiben und mach es so, wie deine Möglichkeiten es zulassen:
> 
> 
> ```
> ...



das klappt irg wie nicht hab das jetzt bisschen umgeändert, weil wenn ich das so ausführe dann zählt der mir nur wie viele zahlen ich dort eingegeben habe, also es fängt erst garnicht an hoch zu zählen, obwohl es ja eig sollte weil : 
	
	
	
	





```
while(next != 0) {
	i++;
```

die sind ja nie gleich....


----------



## Sonecc (23. Feb 2011)

*Mal auf meinen Beitrag verweis* nicht dass er untergeht


----------



## Dgaz (23. Feb 2011)

soo habe eine email von meinem Lehrer bekommen, in dem steht das er es genau so meint wie es Sonecc erklärt hat....-.-
wir saßen mit freunden echt lange drann und haben es nicht hingekriegt.... naja dann fang ich halt von vorne an..


----------



## Tomate_Salat (23. Feb 2011)

funktionieren tut es schon, deine Aufgabenstellung ist nur nicht ganz klar :-/. Aber letztendlich egal ich wollte dir nur den Weg zeigen und das Thema weg von den Threads lenken, lösen musst du es selber 
Ich addiere einfach einen Wert und lasse danach die nächste Zahl einlesen. Du kannst das auch  umgekehrt machen, wenn es deiner Aufgabenstellung hilft: erst die Zahl einlasen und dann drauf addieren.


----------



## Dgaz (23. Feb 2011)

hmm kk danke,
jetzt muss ich nur noch gucken wo die eingabe hingeht um diese zu addieren.
weil next ist es ja nicht.
Wie kann ich die ergebnisse anzeigen lassen, um eine summe daraus zu bilden ?


----------



## Tomate_Salat (24. Feb 2011)

Ergebnisse? Meinst du damit die Werte die dazu addiert werden? Die hast du schon darstehen, weil Sie der Benutzer ja eingeben musste. Ansonsten verwende doch hier einfach Scanner (Java 2 Platform SE 5.0) - nextInt.


----------

