Elemente im Array verschieben

Status
Nicht offen für weitere Antworten.
Hi,

ich möchte gerne eine Methode schreiben bei welcher ich meine Array elemente um eine bestimmte Anzahl verschiebe. Wobei elemente welche über die Länge des Arrays hinaus gehen dann iweder vorne landen.

Also z. Bsp:

a=[1,2,3,4,5,6}

verschiebe um k = 2

b={5,6,1,2,3,4}

irgendwie finde ich keinen passenden einfach mathematischen Ausdruck für diesen Algorithmus.

also jetzt ergibt ja

b[0]=a[4]=Betrag von k-a.length
b[1]=a[5]=Betrag von k-a.length-1
b[2]=a[0]= hier unterbricht ja schon wenn ich weiter mit Beträgen zählen möchte, da ja Betrag von k-6=4 und minus 2 bin ich ja dann bei 2 und was stimmt ja dann nicht...
b[3]=a[1]
b[4]=a[2]
b[5]=a[3]

Stehe also ein weng auf dem schlauch....
 
M

maki

Gast
Arrays sind low-level und so gar nicht OO.

In Java nutzt man das Collection Framework und dessen Typen (List, Set, Map), dafür gibt es dann auhc die entsprechenden Methoden, zB. Collections.rotate(..)
 
das mag sein, verstehen möchte ich es trotzdem. und da ich anfänger bin würde ich mich freuen, wenn mir jemand hier weiter helfen würde.
 

Marco13

Top Contributor
Ja, das Zaumberwort ist "Rotation". Am einfachsten (aber ineffizient) ist es, den Array n-mal um 1 zu rotieren, d.h. n mal sowas zu machen wie
Code:
        int a = array[array.length-1];
        System.arraycopy(array, 0, array, 1, array.length-1);
        array[0] = a;
Noch trivialer (aber auch nicht besonders geschickt) wäre, eine Kopie des Arrays zu erstellen, die "rotiert" zu befüllen, und das ganze dann zurückzukopieren. Das "rotierte" Befüllen wäre dann sowas wie
Code:
for (int i=0; i<src.length; i++)
{
    int j = (i+n) % dst.length;
    dst[j] = src[i];
}

Für alles effizientere oder geschicktere müßte man nachdenken ... oder mal TAOCP vom Regal holen - da steht sowas bestimmt drin.
 
hmmm...

was soll ich vom Regal holen???

sdrc und diese copy funktion ist mir noch völlig unbekannt...

würde dann auch das gehen:

zwei for schleifen.

for (i=1;i<k;i++) {
b=a[a.length-(k-i)]
}
for (i=0;i<a.length-k;i++){
b[k+i]=a
}

total bekloppt denke ich aber passt dass oder komme ich irgendwann an einen wert k der mir das falsche ergebnis ausgibt?
 
ah wird wahrschienlich nicht gehen, wenn k > a.length ist da ich ja dann einen negativen wert erhalte...

das ist ja scheiße...

hmmm

oder warte wenn k größer a.length ist

dann kann ich doch einfach

a=k%a.length machen oder???

habe ich dann ja das gleiche?

also wenn a.length=6 und k=7 ist dann kommt ja nach 6 verschiebungen j alles auf seinen platz oder?
 

Civilazi

Bekanntes Mitglied
oder warte wenn k größer a.length ist

dann kann ich doch einfach

a=k%a.length machen oder???

habe ich dann ja das gleiche?

also wenn a.length=6 und k=7 ist dann kommt ja nach 6 verschiebungen j alles auf seinen platz oder?

Geht auch bei <length . Siehe Post über deinem, da steht doch die Lösung, auf die du grad gekommen bist.
 

Marco13

Top Contributor
TAOCP kannst du websuchen, "src" und "dst" standen für die beiden Arrays: "src" für "source", das ursprüngliche Array, und "dst" für "destination", das Array, wo die Daten reinkopiert werden sollen. System.arraycopy kann man auch mit einer Schleife nachbauen. Diese For-Schleife würde dann nicht so viele Tricks enthalten - das wichtigste ist die Zeile
int j = (i+n) % dst.length;
oder etwas ausführlicher:
int indexImZielArray = (indexImQuellArray + verschiebung) % array.length;
 

0x7F800000

Top Contributor
Ich hätte hier folgenden Vorschlag: in-place & O(n)
[highlight=Java]
class _
{
public static int gcd(int a, int b){
return b==0?a:gcd(b,a%b);
}
public static int[] rotate(int[] array, int k){
int gcd=gcd(array.length,k);
int steps=array.length/gcd;

for(int g=0; g<gcd; g++){
int temp=array[g];
for(int s=0, currentIndex=g; s<steps;s++){
currentIndex=(currentIndex+k)%array.length;
int swap=array[currentIndex];
array[currentIndex]=temp;
temp=swap;
}
}

return array;
}
public static void main(String..._){
System.out.println(Arrays.toString(rotate(new int[]{1,2,3,4,5,6}, 4)));
}
}
[/highlight]
Ziemlich lustig, nicht? :D
Was sagt denn der gute alte Herr Prof. Knuth dazu????:L geht's einfacher?
 

0x7F800000

Top Contributor
Wiee?? :shock::shock: Knuth ist der Autor von TAOCP!! Und überhaupt ein multitalent und berühmtes Genie, so ein paar namen sollte man doch kennen^^
":" bei arrays wird in for-schleifen verwendet
[highlight=Java]
for(int x:new int[]{1,2,3,4,5,6}){
System.out.println(x);
}
[/highlight]
heißt soviel wie "für jedes x aus {1,2,3,4,5,6} mache dies und das"
Wo hast du das her, das kam hier doch nirgends vor????:L
 

0x7F800000

Top Contributor
Lass erstmal die Algos in Ruh' ;)
Um Java zu lernen braucht man das zuerstmal nicht.
Das eigentliche Buch hab ich auch nie gelesen, aber der Knuth ist halt einfach irgendwie überall present, es gibt einfach so viel zeug wo er mitgemacht hat...:idea:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
0 Element aus Array löschen andere Elemente verschieben? Java Basics - Anfänger-Themen 7
A Elemente in einem Array Java Basics - Anfänger-Themen 5
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
L Elemente zufällig in ein Array verteilen Java Basics - Anfänger-Themen 12
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
A Elemente in array umkehren Java Basics - Anfänger-Themen 32
H Alle Array-Elemente auf einmal überprüfen? Java Basics - Anfänger-Themen 10
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
B Ausgeben einzelner String Array Elemente funktioniert nicht Java Basics - Anfänger-Themen 4
C Array - Elemente umordnen ? Java Basics - Anfänger-Themen 20
B zwei zufällige elemente aus array lesen und überprüfen Java Basics - Anfänger-Themen 8
T Elemente aus zweidimensionalen Array löschen Java Basics - Anfänger-Themen 6
D Array Elemente auslesen Java Basics - Anfänger-Themen 14
M XML-Elemente in Array speichern Java Basics - Anfänger-Themen 26
T Überprüfen, ob Array Elemente hat Java Basics - Anfänger-Themen 22
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
D String array im konstruktor --> wie gibt man elemente an? Java Basics - Anfänger-Themen 2
V Elemente an Array anhängen Java Basics - Anfänger-Themen 5
S Elemente aus Array entfernen Java Basics - Anfänger-Themen 8
M Array Elemente löschen Java Basics - Anfänger-Themen 6
G Elemente in einem String-Array in einen String umwandeln Java Basics - Anfänger-Themen 2
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
T SCC Elemente Java Basics - Anfänger-Themen 0
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L String zerlegen & elemente hinzufügen Java Basics - Anfänger-Themen 5
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
S Elemente in Liste einfügen Java Basics - Anfänger-Themen 2
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
M Elemente in einer ArrayList einander zuordnen. Java Basics - Anfänger-Themen 18
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
R Elemente eine Liste im Ring schliessen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
1 Wie addiert man die Elemente einer Verketteten Liste? Java Basics - Anfänger-Themen 5
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
gamebreiti Gui menu ArrayList Elemente wiedererkennen Java Basics - Anfänger-Themen 3
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W wie legt man die elemente der liste k Mal fest ? Java Basics - Anfänger-Themen 7
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
C ArrayList - überschreibt Elemente Java Basics - Anfänger-Themen 7
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben