Java Zahlen/Elemente Rückwärts Ausgeben

11/06/2016 00:42 Soloq#1
Ich habe es soweit geschafft dass die Felder durch den Scanner eingelesen werden und die Elemente ebenso. Nun ist mein Problem dass ich die Zahlen nicht rückwärts ausgeben kann. Beispiel Anzahl Felder 3 , Elemente 6,7,8 also als Ergebnis müsste 8,7,6 rauskommen.

Mein Ansatz: feld[index]= feld[anzahl - index - 1];
aber da werden nur 2 Zahlen rückwärts ausgegeben.

Ich möchte nur das in der 2. While Schleife was geändert wird.. Bin noch Anfänger aber ich denke der Ansatz dürfte doch irgentwie in die richtige Richtung gehen??? Bin sehr dankbar wenn mir jemand kurz unter die Arme greifen kann.

import java.util.Scanner;

public class scannerback {
public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
int index;
int anzahl;
int[] feld;
int[] hallo = null;



anzahl = sc.nextInt();
feld = new int[anzahl];



index = 0;
while ( index < anzahl )
{


feld[index] = sc.nextInt();
index = index + 1;
}



index = 0;
while ( index < anzahl )
{
feld[index]= feld[anzahl - index - 1];

System.out.print( feld[index] + " " );
index = index + 1;
}


}
}
11/06/2016 10:53 Mysthik#2
Ich versuche mal zu erklären wo dein Fehler liegt, bevor ich dir zeige wie man es behebt.

Du machst folgendes:
Code:
feld[index] = feld[anzahl - index - 1];
Wenn wir jetzt 2 3 4 5 als Eingabe verwenden haben wir folgendes Problem.

Code:
index = 0, anzahl = 4
feld[0] = feld[4 - 0 - 1]; => feld[0] = feld[4] --> also feld[0] = 5
feld ist nun {5, 3, 4, 5}


index = 1, anzahl = 4
feld[1] = feld[4 - 1 - 1]; => feld[1] = feld[3] --> also feld[1] = 4 
feld ist nun {5, 4, 4, 5}
Jetzt müsste dir der Fehler auffallen. So ziemlich alles in Java ist mutable sprich du kannst den Zustand und Inhalt ändern. Sobald du dies aber tust gehen die Informationen von vorher verloren. Dein feld hat die Informationen über die ersten beiden Einträge nicht mehr, da diese schon ersetzt worden sind mit 5 und 4. Du kannst das Problem lösen, indem du die Werte Zeitweise in ein neues Array schreibst und das dann verwendest.

Dein while-Konstrukt sieht dann so aus:
Code:
int[] tmpArray = new int[feld.length]; //anstatt feld.length geht auch anzahl
while (index < anzahl) {
	tmpArray[index] = feld[anzahl - index - 1];
        System.out.print(tmpArray[index] + " ");
	index = index + 1;
}

Ein kleiner Tipp noch. Du kannst deine while-Schleifen durch for-Schleifen ersetzen. Das ganze sieht dann so aus:

Code:
int[] tmpArray = new int[feld.length]; 
for (int i = 0; i < anzahl; i++) {
	tmpArray[i] = feld[anzahl - i - 1];
	System.out.print(tmpArray[i] + " ");
}
11/06/2016 12:11 Soloq#3
Quote:
Originally Posted by Mysthik View Post
Ich versuche mal zu erklären wo dein Fehler liegt, bevor ich dir zeige wie man es behebt.

Du machst folgendes:
Code:
feld[index] = feld[anzahl - index - 1];
Wenn wir jetzt 2 3 4 5 als Eingabe verwenden haben wir folgendes Problem.

Code:
index = 0, anzahl = 4
feld[0] = feld[4 - 0 - 1]; => feld[0] = feld[4] --> also feld[0] = 5
feld ist nun {5, 3, 4, 5}


index = 1, anzahl = 4
feld[1] = feld[4 - 1 - 1]; => feld[1] = feld[3] --> also feld[1] = 4 
feld ist nun {5, 4, 4, 5}
Jetzt müsste dir der Fehler auffallen. So ziemlich alles in Java ist mutable sprich du kannst den Zustand und Inhalt ändern. Sobald du dies aber tust gehen die Informationen von vorher verloren. Dein feld hat die Informationen über die ersten beiden Einträge nicht mehr, da diese schon ersetzt worden sind mit 5 und 4. Du kannst das Problem lösen, indem du die Werte Zeitweise in ein neues Array schreibst und das dann verwendest.

Dein while-Konstrukt sieht dann so aus:
Code:
int[] tmpArray = new int[feld.length]; //anstatt feld.length geht auch anzahl
while (index < anzahl) {
	tmpArray[index] = feld[anzahl - index - 1];
        System.out.print(tmpArray[index] + " ");
	index = index + 1;
}

Ein kleiner Tipp noch. Du kannst deine while-Schleifen durch for-Schleifen ersetzen. Das ganze sieht dann so aus:

Code:
int[] tmpArray = new int[feld.length]; 
for (int i = 0; i < anzahl; i++) {
	tmpArray[i] = feld[anzahl - i - 1];
	System.out.print(tmpArray[i] + " ");
}
Vielen Dank für die ausführliche Erklärung.Dank dir habe ich es nun verstanden.
11/06/2016 12:40 .Scy#4
Wir sind hier doch bei Java, warum nutzt man nicht javas bibliotheken?

Code:
int[] test = {123,456,789};
		String a = "";
		StringBuilder builder;
		for(int temp: test){
			a += temp;
		}
		builder = new StringBuilder(a);
		System.out.println(a); //Ausgabe: 123456789
		a = builder.reverse().toString();
		System.out.println(a); //Ausgabe: 987654321
Das wäre ein beispiel um es einfach zu machen.

nutzen einer for-each schleife um jedes element des Arrays ab zu arbeiten, diese einfach hintereinander an einen leeren string anhängen und durch den stringbuilder umdrehen.
11/06/2016 15:55 algernong#5
Weil er Übungsaufgaben macht und was lernen will?
11/06/2016 16:06 Soloq#6
Quote:
Originally Posted by algernong View Post
Weil er Übungsaufgaben macht und was lernen will?
jop genau habe nun auch als weitere Übung selbst geschafft bei einer Schranke den Index der Elemente auszugeben. Dank dem Ansatz mit einem neue Array.

Von den Bibiliotheken habe ich noch keine Ahnung.^^ Bin noch Anfänger

Wie schließe ich hier überhaupt den Thread da mir geholfen wurde?
11/12/2016 14:51 Devsome#7
#closed as requested