# Array mit Zahlen füllen



## JAVAsk (7. Dez 2014)

Ich möchte ein Programm erstellen, welches int-Zahlen eingegeben bekommt und diese in ein Array einträgt. Es wäre sehr nett, wenn eine iterative und rekursive Variante gezeigt wird.
Da ich mit der Eingabeaufforderung kompiliere und ausführe, müsste ich doch in die main-Methode auch was eintragen, damit auch etwas ausgeführt wird oder?
Mein Ansatz:

```
public class Array{

public static void main(String[] args){
// ?
}


public void trageEin(int n){
int[] a= new int[9];
for(int i=0; i<a.length; i++){
a[i]=n;
}
}

public void gibAus(){
System.out.println("Dein Array:"+a[]);
}

}
```


----------



## Saheeda (7. Dez 2014)

Und was genau ist dein Problem?


----------



## njans (7. Dez 2014)

```
System.out.println("Dein Array:"+a[]);
```
a[] ist syntaktisch nicht korrekt.


```
public void trageEin(int n){
int[] a= new int[9];
for(int i=0; i<a.length; i++){
a[i]=n;
}
```
a ist eine lokale Variable hier.


----------



## JAVAsk (8. Dez 2014)

Heißt das, dass ich die Ausgabe in die Methode trageEin schreiben muss.
Also:


```
public class Array{

public void trageEin(int n){
int[] a= new int[9];
for(int i=0; i<a.length; i++){
a[i]=n;
}
System.out.println("Dein Array:"+a[]);
}
```

Wie muss ich das mit der main-Methode machen? Denn ich wollte es mit der Eingabeaufforderung ausführen. Außerdem arbeite ich mit Notepad++, da das kein großes Programm ist. Vielen Dank!


----------



## VfL_Freak (8. Dez 2014)

Moin,

hast Du mal den Beitrag von *njans* gelesen ??
Falls ja, was sagt er Dir ??

Gruß
Klaus


----------



## JAVAsk (8. Dez 2014)

a war eine lokale Variable, weshalb ich alles in eine Methode gepackt habe.
Zur Ausgabe:

```
System.out.println("Dein Array:"+a[]);
```
hat njans zwar geschrieben, dass es syntaktisch nicht korrekt ist, aber ich verstehe nicht, was ich daran ändern soll. Also, muss dann statt a[] in der Klammer etwas anderes stehen.

Jetzt habe ich versucht, das Programm etwas zu erweitern. Der Benutzer soll so viele Zahlen wie a.length eingeben. Danach soll das Programm diese Zahlen nacheinander in das Array eintragen. 

```
public class Array{

public static void main(String[] args){
int x=0;
int z = Integer.parseInt(System.console().readLine());
int n=z;
int[] a= new int[9];
for(int i=0; i<a.length; i++){
a[i]=z;
a[z]=i;
System.out.println("Dein Array:"+a[z]);
}

}

}
```
Ich weiß nicht genau, wie die eingegebenen Zahlen in das Array übertragen werden sollen.
Bitte um einen Ansatz. Vielen Dank!


----------



## Androbin (8. Dez 2014)

Kleiner Tipp 1:
Du brauchst eine (for-)Schleife!

Kleiner Tipp 2:
Du brauchst eine Variable, die mitzählt, bei dem wievielten Slot (des Arrays) gerade bist!


----------



## JAVAsk (8. Dez 2014)

Heißt das, dass ich zwei for-Schleifen haben muss. Eine for-Schleife soll das Array von 0 bis a.length durchlaufen. Aber was macht dann die zweite for-Schleife, wenn es die geben soll? Ist das nicht richtig, wie ich die for-Schleife hingeschrieben habe. In meinem Beispiel geht doch die Variable i das Array von 0 bis a.length durch. Das Problem entsteht glaube ich beim Einfügen der eingegebenen Zahlen in das Array. Bitte um Hilfe. Vielen Dank.


----------



## Androbin (8. Dez 2014)

JAVAsk hat gesagt.:


> Heißt das, dass ich zwei for-Schleifen haben muss. Eine for-Schleife soll das Array von 0 bis a.length durchlaufen. Aber was macht dann die zweite for-Schleife, wenn es die geben soll? Ist das nicht richtig, wie ich die for-Schleife hingeschrieben habe. In meinem Beispiel geht doch die Variable i das Array von 0 bis a.length durch. Das Problem entsteht glaube ich beim Einfügen der eingegebenen Zahlen in das Array. Bitte um Hilfe. Vielen Dank.


In der for-Schleife muss doch die Scanner-Abfrage sein!
Hilft dir das weiter?


----------



## Saheeda (8. Dez 2014)

@JAVAsk

Du kannst die Abfrage der Zahlen auch innerhalb der Schleife machen.

Frage: Was bezweckst du hier? Warum dieses "herumschieben" der Variablenwerte? Wozu ist n da? Warum a_= z und a[z] = i?
Außerdem ist es ziemlich wahrscheinlich, dass dir hier eine Exception fliegt. Was ist, wenn ich z.B. z = 20 eingebe?


		Java:In die Zwischenablage kopieren


public class Array{

public static void main(String[] args){
int x=0;
int z = Integer.parseInt(System.console().readLine());
int n=z;
int[] a= new int[9];
for(int i=0; i<a.length; i++){
a[i]=z;
a[z]=i;
System.out.println("Dein Array:"+a[z]);
}

}

}

_


----------



## JAVAsk (8. Dez 2014)

Eigentlich wollte ich ein Programm schreiben, das
1- den Benutzer nach beliebig vielen Zahlen fragt.
2- durch diese Zahlen die Länge des Arrays festlegt
3- diese Zahlen nacheinander in das Array einträgt

Ich weiß, dass in meinem Code viele Fehler gemacht wurden, aber ich komme trotzdem nicht weiter. Es wäre sehr nett, wenn einer ein Paar Zeilen im Code so ändert, dass ich danach selber versuchen kann und weiterkomme. Vielen Dank!

@Saheeda: Wenn ich z.B. 20 für z eingebe, dann bricht das Programm ab, weil ich eine Zahl größer als 9 (a.length) eingegeben habe.


----------



## Androbin (8. Dez 2014)

JAVAsk hat gesagt.:


> Eigentlich wollte ich ein Programm schreiben, das
> 1- den Benutzer nach beliebig vielen Zahlen fragt.
> 2- durch diese Zahlen die Länge des Arrays festlegt
> 3- diese Zahlen nacheinander in das Array einträgt
> ...




```
int länge = Integer.parseInt( System.console().readLine() );
int[] array = new int[ länge ];

for ( int slot = 0; slot < länge; slot++ ) {
    int wert = Integer.parseInt( System.console().readLine() );
    array[ slot ] = wert;
}
```


----------



## Saheeda (8. Dez 2014)

Ganz so, wie du dir das vorstellst, funktioniert es nicht. Warum? Du musst die Zahlen nach der Abfrage irgendwo zwischenspeichern, z.B. in einer Liste, dann kannst du dir den Spaß mit dem Array aber auch schenken oder überträgst sie halt nachher ins Array.
Oder: Du fragst vorher, wie viele Zahlen der Benutzer eingeben möchte und erzeugst ein Array der entsprechenden Größe.


Versuche mal diese Anweisungen in Java-Code umzusetzen:

Abfrage: Wieviele Zahlen sollen eingelesen werden?

LiesAnzahlvonKonsole()

ErzeugeArray()

Für jedes Element des Arrays:
-- LiesZahlvonKonsole()
-- SpeichereZahlinArray()


----------



## JAVAsk (8. Dez 2014)

Ich habe den Code geändert, aber es macht noch nicht, was es machen soll.


```
public class Array{

public static void main(String[] args){

System.out.println("Wie lang soll dein Array sein?:");
int laenge = Integer.parseInt(System.console().readLine());
int[] array = new int[laenge];


	for (int i=0; i<laenge; i++) {
	for (int s=0; s<array.length; s++){
	int zahl = Integer.parseInt(System.console().readLine());
	array[i]=zahl;
	}
	
		System.out.println("Dein Array:"+array[i]);
	}


}

}
```

So sieht die Ausgabe aus, wenn ich zuerst 3 eingebe für die Länge...:
*Wie lang soll dein Array sein?:
3
1
2
4
Dein Array:4
5
6
7
Dein Array:7
8
9
0
Dein Array:0*

Also gibt das Programm immer die letzte Zahl im Array aus und fragt mich dreimal nach einem Array (statt einmal).
Ich hoffe, dass ihr mir weiterhelfen könnt. Vielen Dank


----------



## Saheeda (8. Dez 2014)

Du brauchst zwei Schleifen, ja, aber nicht ineinander verschachtelt. Mach eine zum Einlesen und _danach_ eine zum Ausgeben.
Du bekommst immer die letzte Zahl ausgegeben, weil du immer nur auf dieselbe Stelle im Array schreibst.
i wird von der Äußeren auf 0 gesetzt, danach wird in der Inneren Schleife s-Mal die Zelle array_ überschrieben.
Danach wird i in der Äußeren auf 1 erhöht und innen wieder s-Mal die Zelle array überschrieben. etc._


----------



## JAVAsk (8. Dez 2014)

Wenn ich die for-Schleifen nicht ineinander implementiere, dann erkennt er die Variablen nicht mehr. Wie muss ich das dann machen, sodass die Variable von der ersten for-Schleife in die zweite for-Schleife übernommen wird?
Vielen Dank!


----------



## JavaMeister (8. Dez 2014)

> Wie muss ich das dann machen,



Kauf Dir doch endlich ein Buch.


----------



## Saheeda (8. Dez 2014)

@JAVAsk

Welche Variablen erkennt er dann wo nicht mehr?
Du machst zwei getrennte Schleifen, jede hat ihren eigenen "Hochzähl-Variablen". Da das Array eh außerhalb der Schleifen definiert wird, kannst du auch problemlos aus beiden heraus darauf zugreifen.


----------



## JAVAsk (8. Dez 2014)

@JavaMeister Das war nicht die Antwort auf meine Frage.
Es gibt wirklich einen großen Unterschied zwischen einem *"B"enutzer* und einem *"b"enutzer*. Wenn ich eine Frage stelle, erwarte ich Antworten bezüglich des Themas. Falls einer nicht weiter weiß, ist das natürlich in Ordnung.
Wenn ich mit den Antworten nicht wirklich weiterkomme, dann stelle ich weitere Fragen, deren Antworten mich weiterbringen könnten. Deswegen finde ich es sehr nett, dass einige Benutzer auf die meisten Fragen eine Antwort geben.

Jetzt hoffe ich, dass ich trotzdem auf meine vorherige Frage eine Antwort bekomme. Vielen Dank an alle Benutzer, die mir eine hilfreiche Antwort geben wollen und an alle Benutzer, die meine Frage durchlesen, sich Gedanken darüber machen und somit eine bestimmte Zeit damit verbringen!


----------



## JAVAsk (9. Dez 2014)

@Saheeda
Das Programm hatte "array_" nicht mehr erkannt, aber jetzt habe ich es hinbekommen:



		Java:In die Zwischenablage kopieren


public class Array{

public static void main(String[] args){

System.out.println("Wie lang soll dein Array sein?:");
int laenge = Integer.parseInt(System.console().readLine());
int[] array = new int[laenge];

	for (int s=0; s<array.length; s++){
	int i=s;
	int zahl = Integer.parseInt(System.console().readLine());
	array[i]=zahl;
	
	for (i=0; i<laenge; i++) {
	System.out.println("Die "+i+". Stelle im Array: "+array[i]);
	}
	}

}

}


Die Ausgabe sieht so aus (z.B. für ein Array der Länge 3):
*3
1
Die 0. Stelle im Array: 1
Die 1. Stelle im Array: 0
Die 2. Stelle im Array: 0
2
Die 0. Stelle im Array: 1
Die 1. Stelle im Array: 2
Die 2. Stelle im Array: 0
3
Die 0. Stelle im Array: 1
Die 1. Stelle im Array: 2
Die 2. Stelle im Array: 3*

Eine kleine Frage noch:
Wie muss ich das Programm noch ergänzen, sodass das Programm nicht mit der "0. Stelle" beginnt, sondern 1. Stelle?
Muss ich dafür eine weitere Variable benutzen? Vielen Dank für eure Mühe! _


----------



## Harry Kane (9. Dez 2014)

Die Zuweisung "int i = s" in der for-Schleife kanst du dir sparen. Warum arbeitest du nicht direkt mit s?
Und die indices in Java arrays beginnen grundsätzlich bei 0. Es steht dir aber natürlich frei, statt array_ sowas wie array[i+1] zu verwenden, was allerdings nur geht, solange i kleiner ist als laenge -1, oder in der Ausgabe System.out.println("Die "+(i+1)+". Stelle im Array: "+array); zu schreiben._


----------



## Saheeda (9. Dez 2014)

@JAVAsk

Du benutzt jetzt schon die eine oder andere Variable zu viel (siehe Hinweis von Harry Kane).
Dass Java bei 0 anfängt zu zählen, ist ganz einfach so (und übrigens auch in ziemlich vielen anderen Programmiersprachen!) und du solltest auch gar nicht erst damit anfangen, das irgendwie umgehen zu wollen. Sonst kommst du (oder ein Partner) irgendwann in Teufels Küche.
Bei der Ausgabe kannst du hingegen schreiben was du willst (siehe Harry Kane).


----------



## JAVAsk (9. Dez 2014)

```
public class Array{

public static void main(String[] args){

System.out.println("Wie lang soll dein Array sein?:");
int laenge = Integer.parseInt(System.console().readLine());
int[] array = new int[laenge];

	for (int s=0; s<array.length; s++){
	int i=s;
	int zahl = Integer.parseInt(System.console().readLine());
	array[s]=zahl;
	
	for (i=0; i<laenge; i++) {
	System.out.println("Die "+(i+1)+". Stelle im Array: "+array[i]);
	}
	}

}

}
```

Der Hinweis mit (1+i) in der Ausgabe hat geholfen. Ich hatte die Klammern vergessen, weshalb das Programm die Zahlen hintereinander ausgegeben hatte. Das wäre schonmal gelöst!

Ich habe versucht 

```
int i=s;
```
wegzulassen, aber kam dann doch nicht weiter...
Vielen Dank, dass ihr euch um diese Uhrzeit bemüht.


----------



## Saheeda (9. Dez 2014)

Lösch die Zeile doch einfach. Dein Array arbeitet in der ersten Schleife mit s als Index und i definierst du in der zweiten Schleife neu...


----------



## JAVAsk (9. Dez 2014)

```
public class Array{

public static void main(String[] args){

System.out.println("Wie lang soll dein Array sein?:");
int laenge = Integer.parseInt(System.console().readLine());
int[] array = new int[laenge];

	for (int s=0; s<array.length; s++){
	//int i=s;
	int zahl = Integer.parseInt(System.console().readLine());
	array[s]=zahl;
	
	for (int i=0; i<laenge; i++) {
	System.out.println("Die "+(i+1)+". Stelle im Array: "+array[i]);
	}
	}

}

}
```

So funktioniert das. Vielen Dank! Somit wäre meine Frage beendet.
Nur eine andere Frage noch:
Ist es normal, dass bei der Eingabe von ganz großen Zahlen wie z.B. 999999999999999 das Programm eine Exception ausgibt. Oder ist das nur bei Arrays so? Vielen Dank nochmals!


----------



## Saheeda (9. Dez 2014)

Welche Exception kommt denn? Und wann?


----------



## JAVAsk (9. Dez 2014)

NumberFormatException.forInputString(Unknown Source)
Integer.parseInt(Unknown Source)
...

an dieser Stelle

```
array[s]=zahl;
```


----------



## Saheeda (9. Dez 2014)

Naja, int hat nur nen gewissen Datenbereich, den du mit der Zahl grandios überschreitest. In der Wikipedia gibts zu Integer nen Artikel, wo auch der Überlauf beschrieben wird.


----------



## JAVAsk (9. Dez 2014)

Ok, jetzt weiß ich wieder.
Vielen Vielen Dank!!!


----------

