# Zahlenfolge einlesen



## kulturfenster (25. Feb 2007)

leider bin ich weder in der forensuche noch in der api fündig geworden, deshalb hier eine kurze frage:

Ich möchte einige Zahlen einlesen und diese in einen Array speichern. Wie kann ich die einzelnen Elemente vom Input erkennen?
Input: 1  4  5  8  5  7  4

Wo hät ich das in der Api finden können?


----------



## Marco13 (25. Feb 2007)

Vielleicht nicht direkt in der API. Durch Websuche und API findet man raus, wie man einen String einlesen kann (je nach Java-Version mit einem Scanner oder einem Passenden Reader). Den eingelesenen String kann man dann einem StringTokenizer übergeben

```
String s = lies string von console
StringTokenizer st = new StringTokenizer();
while (st.hasMoreTokens())
{
    String t = st.nextToken();
    int i = Integer.parseInt(t);
    // i in array legen
}
```
Könnte aber sein, dass das mit dem neuen Scanner von Java 1.5 sogar noch einfacher geht. Der bietet sowas wie "nextInt" an - evtl. kann man das mehrmals aufrufen, wenn man in EINER Zeile mehrere ints eingegeben hat. Falls du Java 1.5 verwendets, kanst du das ja mal ausprobieren (hab hier gerade nur 1.4...)


----------



## kulturfenster (25. Feb 2007)

ja, ich hab 1.5. 

nextInt() kenn ich auch, allerdings wird damit meines Wissens nur der erste Wert eingelesen.

eingabe = scanner.nextInt();
// eingabe: 1  2  3  4  5 
System.out.println(eingabe);
// => 1

Wie kann man die restlichen Werte berücksichtigen?


----------



## SlaterB (25. Feb 2007)

nochmal nextInt aufrufen?
oder altbewährt nextString, dann hast du alle als String und musst StringBuffer oder noch einen Scanner auf diesen String benutzen,


----------



## kulturfenster (25. Feb 2007)

nochmals nextInt() aufrufen geht nicht, weil ich alle Werte zusammen direkt in einen Array speichern möchte. Buffer geht auch nicht, weil der User unterschiedlich grosse Zahlen (1, 10, 100, ...) eingeben kann, . Wie meinst du noch einen Scanner auf diesen String benutzen?
bitte korrigieren, falls ich ganz falsch liegen sollte.


----------



## SlaterB (25. Feb 2007)

> nochmals nextInt() aufrufen geht nicht, weil ich alle Werte zusammen direkt in einen Array speichern möchte. 

es gibt keinen Befehl der dir direkt ein Array erstellt, 
und wenn es ihn gebe, dann wäre er eben intern eine Folge von mehreren Befehlen,
daher verstehe ich das Problem des mehrmaligen Operationsaufrufs nicht 

> Buffer geht auch nicht, weil der User unterschiedlich grosse Zahlen (1, 10, 100, ...) eingeben kann,

was hat die Länge der Zahl mit dem Buffer zu tun und von welchem Buffer ist die Rede?
(ich schrieb StringBuffer, meinte natürlich StringTokenizer  )

> Wie meinst du noch einen Scanner auf diesen String benutzen?

mit einem Scanner kann man nicht nur einen InputStream zerlegen, sondern auch einen normalen String aufteilen

------

ich kenne Scanner nicht so genau, hoffe aber mal, dass man ihn auch zum Einlesen von 1 2 333 400 
verwenden kann (warum nicht?),
also an dich die Aufforderung: ausprobieren, was liefert der zweite nextInt()-Aufruf?

oder alternativ als String einlesen und zerlegen, 
ob manuell, mit StringTokenizer, String.split, Scanner oder wie auch immer


----------



## Egyptmaster (26. Feb 2007)

Also den Eingabe String haste ja und da kannste mit folgendem Code alle Integer herrausnehmen, egal wie groß, die Zahlen sind. Die List als Zwischenspeicher, weil ich die Länge des Arrays vorher nicht kenne. Dann dem Scanner geben und in der Schleife alle Elemente vom typ int entnehmen. Da ArrayList nur Object nimmt, die Frapperklasse Integer für int verwenden. Am Ende wieder in int-Array wandeln. Hoffe du meintest das so ^^


```
import java.util.ArrayList;
import java.util.Scanner;


public class Converter {

	public static void main(String[] args) {		
		String eingabe = "1 2 3 4 5 6 7 8 9 10";
		Scanner scanner = new Scanner(eingabe);
		ArrayList<Integer> list = new ArrayList<Integer>();
		while (scanner.hasNextInt())
			list.add(new Integer(scanner.nextInt()));
		int array[] = ConvertListToArray(list);
		for ( int i = 0 ; i < array.length; i++)
			System.out.println(array[i]);
	}
	
	private static int[] ConvertListToArray(ArrayList<Integer> list)
	{
		int array[] = new int[list.size()];
		for ( int i = 0 ; i < list.size(); i++)
			array[i] = list.get(i).intValue();
		return array;
	}
	
}
```


----------



## Marco13 (26. Feb 2007)

Dazu soltle man vielleicht noch sagen, dass ArrayList eine "toArray"-Methode anbietet, und's darum das ConvertListToArray nicht braucht...


----------



## Egyptmaster (26. Feb 2007)

naja schon aber diese Methode kann nur in ein Array vom Typ Object konvertieren, wenn ich mich jetzt net irre also maximal in Integer und nicht in int


----------

