# Eingabe von Zahlen und anschliessend höchste Zahl ausgegeben



## kalakiu (18. Dez 2006)

Hallo,

ich versuche gerade ein kleines programm zu schreiben, dass mir  aus mehreren zahlen die ich selbst eingebe die höchste am ende ausgibt.
habe auch schon gegoogelt... aber ich komm irgendwie nicht drauf 
http://www.zum.de/wiki/index.php/Arrays_(Java) << habe es anhand des beispiels versucht aber geht nicht 
hab nen tipp bekommen ich solle es irgendwie mit bufferedreader anstellen, aber wie gesagt bin ziemlicher anfänger.

kann man am anfang auch eigentlich bestimmen wieviele zeahlen man angeben darf?

gruß und vielleicht hat einer nen Tipp bzw beispielseiten...


----------



## hupfdule (18. Dez 2006)

Dann zeig mal, was du bis jetzt gemacht hast und vor allem _was_ nicht geht.


----------



## kalakiu (18. Dez 2006)

```
public class Test {

public static void main(String[] args) {
System.out.print("Bitte Eingabe machen: ");
try {
BufferedReader reader = new BufferedReader; (
new InputStreamReader (System.in))
String s = reader.readLine();
System.out.println("Ihre Eingabe war: " + a);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
```
so,
weiss aber jetzt nicht ganz wie ich nun das was ich oben gecshrieben hab realisieren kann


----------



## hupfdule (18. Dez 2006)

Formatiere deinen Code mal etwas besser. Pro Block eine Einrückung von i.d.R 4 Zeichen. So kann das ja keiner lesen.

Also im Grunde hast du gar nichts. 

Wo ist denn dein Verständnisproblem? Das Einlesen der Zahlen müsste ja schon funktionieren. Diese liegen dir als String vor. Du müsstest sie also noch in einen int wandeln. Stichwort: Integer.parseInt(String)

Diese int-Werte speicherst du in einem array ab und suchst anschließend den größten davon raus.

Das Einlesen der Zahlen müsstest du natürlich noch etwas erweitern. So kannnur eine Zahl eingegeben werden. Du müsstest das in einer Schleife machen. Entweder liest du so lange Zahlen ein, bis der Benutzer keine mehr eingegeben hat (mit einer while-Schleife) oder du liest eine bestimmte Anzahl an Zahlen ein (mit einer for-Schleife).


----------



## Jango (18. Dez 2006)

Zuerst:

Wenn du Zahlen speichern willst, dann benutze int.
Du versuchst eine Variable auszugeben, die überhaupt nicht deklariert ist "a".

Zum Auslesen der größten Zahl nimm eine for Schleife und eine if Anweisung.


----------



## L-ectron-X (18. Dez 2006)

Soll denn immer die gleiche Anzahl von Zahlen eingegeben werden, oder variiert diese Anzahl bei jeder Programmbenutzung?


----------



## kalakiu (18. Dez 2006)

hmm soll eigentlich variieren 

irgendwie versuche ich das aber es klappt nicht  vllt. auch weil ich nicht genau weiss was zu tun ist, bzw. wie ich das in java umsetzen kann


----------



## L-ectron-X (18. Dez 2006)

Nun ja...
Um irgendwelche Dinge zur weiteren Verarbeitung zu sammeln benutzt man meistens Listen. Zum Beispiel Arrays. Der Nachteil von Arrays ist aber, dass man vorher wissen muss, wieviele Dinge man drin speichern will.
Ganz anders da dynamische Listen, deren Größe sich automatisch anpasst, je nach dem wieviele Dinge gerade drin gespeichert sind.
Typische Vertreter von Klassen dynamischer Listen sind java.util.ArrayList oder java.util.Vector. 
Beide Listen können Dinge (Objekte) verschiedenen Typs speichern. Der einzige Unterschied zwischen den beiden ist, dass die Klasse Vector synchronisiert ist, das heißt, für den Zugriff von mehreren Threads auf die gespeicherten Daten vorbereitet ist.
Im Gegensatz zu Arrays bieten die Klassen des Collection Frameworks, zu dem auch die beiden o.g. Klassen gehören, leistungsfähige Methoden zur komfortablen Arbeit mit Objekten.

Um bei jedem Programmablauf eine unterschiedliche Anzahl von Zahlen zu speichern, setzt du also eine listenähnliche Klasse ein. Wenn du den obigen Links folgst, kannst dir die bereitgestellten Methoden ansehen.

z.B.

```
String zahl = "120"; //eine eingegebene Zahl (Simulation)
ArrayList list = new ArrayList(); //dynamische Liste erzeugen
list.add(Double.valueOf(zahl)); //den zu einem Kommazahl-Objekt umgewandelten String in der Liste ablegen
```
Dieses Prinzip wird so lange verfolgt, bis ausreichend Zahlen eingegeben wurden.

um nun die größte Zahl zu erhalten kann man die Liste sortieren lassen:

```
Collections.sort(list); //sortiert die Objekte
```

Die größte Zahl kann man nun mit...

```
Double d = (Double)list.get(list.size()-1); // gibt letztes (größtes) Objekt in der sortierten Liste zurück
System.out.println(d.toString());
```
...ausgeben.

Die Funktionen der hier benutzen Methoden kannst du in der API-Doc der Klassen _java.util.Collections, java.util.ArrayList_ und _java.lang.Double_ nachlesen.


----------



## kalakiu (19. Dez 2006)

Hallo und danke für die vorschläge und tipps erstmal  :toll: 
könnte man die Werte auch mit Integer.MIN_VALUE und Integer.MAX_VALUE überprüfen und dann den höchsten ausgeben? habe dazu auch etwas gelesen, dass es möglich sei.

gruß


----------



## hupfdule (19. Dez 2006)

Anonymous hat gesagt.:
			
		

> könnte man die Werte auch mit Integer.MIN_VALUE und Integer.MAX_VALUE überprüfen



Nein, diese Werte geben nur an, was der größte und der kleinste Integer-Wert ist, der von Java im Datentyp int dargestellt werden kann.

Aber über die Methode Math.max(..), bzw. Math.min(..) kannst du das erreichen. Das Vergleicht allerdings immer nur zwei Werte miteinander. Von daher wird dir das wohl eher wenig bringen.


----------



## Guest (19. Dez 2006)

hmm 
Bei mehr als 2 Zahlen also wie oben becshrieben erst sortieren und dann den höchsten wert anzeigen lassen. Ja?


----------



## hupfdule (19. Dez 2006)

Du musst es nicht zwangsläufig sortieren. Das ist dir überlassen.
Du kannst auch einfach in einer for-Schleife das Array (oder die ArrayList) durchlaufen und die Werte vergleichen.

Bsp:


```
int maxValue= list.get(0);

for (int i=1; i<list.size(); i++){
    maxValue= Math.max(maxValue, list.get(i));
}
```


----------

