Elemente eines Arrays verschieben

Mudassar

Mitglied
Hallo,

Ich bin sehr neu beim Programmieren und habe echt sehr viele Probleme, ich bin gezwungen es zu lernen, da es mein Leistungskurs ist.

Ich möchte Elemente im Array verschieben,:

char[] A;
A = new char[6];
A[0] = 'a';
A[1] = 'b';
A[2] = 'c';
A[3] = 'd';
A[4] = 'e';
A[5] = 'f';

sodass, bei der A[0] nichts steht also es soll blank sein und sonst soll alles um eins verschoben werden.

Ich bedanke mich vorraus 🙂
 
Auch wenn du deine Lösung schon gefunden hast, so steht in diesem Thema noch keine & ich wollte mich selbst an der Aufgabe probieren. Dein Ziel war es nicht die Ausgaben um eins zu verschieben, sondern die einzelnen Felder im Array selbst.

In meiner Lösung kannst du beliebig viele character Werte hinzufügen, das neue Array verschiebt alles um 1 Feld nach rechts:

Java:
char[] A;
        A = new char[8];
        A[0] = 'a';
        A[1] = 'b';
        A[2] = 'c';
        A[3] = 'd';
        A[4] = 'e';
        A[5] = 'f';
        A[6] = 'g';
        A[7] = 'h';
      
        System.out.println("Vorher: ");
        for (int i = 0; i < A.length; i++) {
           System.out.println("A -- Arrayfeld:  " + i + " Arrayinhalt: " + A[i] );
        }

        char[] X;
        X = new char [A.length+1];
      
        System.out.println("Nachher: ");
        for (int i = 0; i < X.length; i++) {
            if (A.length != i){
                char zwischenSpeicher = A[i];
                X[i+1] = zwischenSpeicher;
                }    else if (i == 0) {
                    X[0] = ' ';
                    }
            System.out.println("X -- Arrayfeld:  " + i + " Arrayinhalt: " + X[i] );
          
        }
 
@3njoyeD Deine Lösung ist richtig und funktioniert gut, aber noch einfacher ist es wenn man das Array von hinten durchläuft. Dann kann man sich den Zwischenspeicher etc sparen.

Java:
        char[] array = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
        for (int i = array.length - 1; i > 0; i--) {
            array[i] = array[i - 1];
        }
        array[0] = ' ';

        System.out.println(array);
 
Hab deinen Code ausgeführt & gesehen, dass dabei das letzte Feld "verschwindet"
Kommt darauf an, ob man damit zufrieden ist, oder ob man den gesamten Inhalt verschieben will.
Wenn ja, dann kommt man wohl ohne ein 2tes Array & Zwischenspeicher nicht drumrum.
 
Das stimmt. War davon ausgegangen, dass man im gleichen Array verschieben möchte.
Wenn man alle Buchstaben verschieben möchte ohne das welche rausfallen braucht man natürlich ein zweites größeres Array. Den Zwischenspeicher braucht man aber tdz. nicht:
Java:
        char[] array = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
        char[] shifted=new char[array.length+1];
        for (int i = shifted.length - 1; i > 0; i--) {
            shifted[i] = array[i - 1];
        }
        shifted[0] = ' ';
        System.out.println(shifted);
 
So macht man das händisch und wenn man es noch ein wenig mehr vereinfacht hätte, nimmt man System::arraycopy:
Java:
import java.util.Arrays;

public class Test {
	
	public static void main(String... args) {
		char[] array = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
		rightShift(array, ' ');
		System.out.println(Arrays.toString(array));
	}
	
	public static void rightShift(char[] array, char emptyChar) {
		if (array != null && array.length > 0) {
			System.arraycopy(array, 0, array, 1, array.length - 1);
			array[0] = emptyChar;
		}
	}
}
 
Hab den Code eingetippt & ausführen lassen:
In der Methode rightShift wird das array übergeben, welches verschoben werden soll & einmal der character mit leerem Inhalt.

Dann wird in der if-Abfrage geprüft ob sich Inhalt im array befindet & das array mind. ein Element besitzt. Wenn die Bedingung erfüllt ist dann kopiere dieses Array mit folgenden Parametern:

Quelle: array
Startposition 0
Ziel auch array
Zielposition 1
Zielposition Länge des arrays -1
Hier ist es dann das gleiche Problem wie bei Tarrews erster Lösung:
Das letzte Feld wird abgetrennt.

@3njoyeD Deine Lösung ist richtig und funktioniert gut, aber noch einfacher ist es wenn man das Array von hinten durchläuft. Dann kann man sich den Zwischenspeicher etc sparen.

Java:
        char[] array = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
        for (int i = array.length - 1; i > 0; i--) {
            array[i] = array[i - 1];
        }
        array[0] = ' ';

        System.out.println(array);

Also Möglichkeiten gibt es nun genug um ein Array zu verschieben.

Mit arraycopy wollte ich auch anfangs code schreiben, aber ich kam mit den Parametern nicht zurecht.
Jetzt geht mir diesbezüglich auch ein kleines Licht auf.
 

Zurück
Oben