Aufgabe mit Arrays

Hi,

kann mir jemand mit der folgenden Aufgabe weiter helfen?

Komme nicht wirklich auf den Algorithmus. Ein Tipp vielleicht?

Schreiben Sie eine Methode static void shiftArray(int[] a, int k),
die als Parameter ein Feld ganzer Zahlen a sowie eine ganze Zahl k erhält. Falls k  0
ist, soll die Methode die Elemente von a um k Stellen nach rechts verschieben. Elemente,
die dabei über den rechten Rand hinausgeschoben werden, sollen am Anfang des Feldes
eingefügt werden. Beispielsweise soll das Feld a = (0, 1, 2, 3, 4, 5, 6) nach dem Aufruf
shiftArray(a,3) die Form (4, 5, 6, 0, 1, 2, 3) besitzen. Im Falle k < 0 sollen die Elemente
entsprechend nach links verschoben werden. Beachten Sie, dass |k|  a.length möglich ist.
 
Hier. Habe aber aus Spaß eine Zeile entfernt.
d. H. wirf den Debug-Mod an, gehe es Schritt für Schritt durch, verstehe es und kompletiere es. (Es ist wirklich nur eine Zeile.)

Java:
public class Shift extends Object
{
	public Shift()
	{
		super();
		
		int[] array = {
				0, 1, 2, 3, 4, 5, 6, 7, 8, 9
		};
		Shift.shiftArray(array, 15);
		
		for(int i:array)
			System.out.println(i);
	}
	public static void shiftArray(int[] a, int k)
	{
		int[] cache = a.clone();
		
		for(int i = 0; i < cache.length; i++)
		{
			int targetPointer = i + k;
			while(targetPointer >= cache.length)
				targetPointer-= cache.length;
		}
	}
	public static void main(String[] args)
	{
		new Shift();
	}
}
 
ach ich wars auch... habe gar nicht gesehen dass da jemand geantwortet hat...

hmmm

deine Antwort ist mir aber nicht ganz einleuchtend... da ich viele sachen einfach nicht kenne.

Was macht denn dei Klasse Objetcs? Und was ist die Anweicung cache?

Die Klasse Object ist die (direkte oder indirekte) Superclass jeder Klasse. Sie enthält alle Methoden die man immer hat, wie z. B. equal, toString oder die 3 wait's.
Cache ist ein Int-Array, welches einfach nur die Kopie des Ausgangsarray ist.
Dann geht die for Feld für Feld durch, definiert das Ziel (i = das aktuelle Feld + k = um wie viele Stellen verschoben wird) und geht dann in einer Schleife wieder zurück, solange das Ziel weiter als die Länge des Arrays ist.
Cache dient einfach dazu, dass du alles beim umsetzen dort hast wo es am Anfang war. Ist zwar vielleicht speicherlastiger als die anderen Methoden, aber meiner Meinung nach am einfachsten zu verstehen.

Was du unter Umständen auch nicht kennst:

super(); ruft den Konstruktor der Superclass auf.

Java:
int[] array = {
	0, 1, 2, 3, 4, 5, 6, 7, 8, 9
};
Definiert ein Array mit Länge und Inhalt direkt.

Java:
for(int i:array)
	System.out.println(i);
Ist eine erweitere for, diese schreibt bei jeden Inhalt das nächste Feld in die Variable.
ist somit quasi eine kürzere Version von:
Java:
for(int runvar = 0; runvar < array.lenght; runvar++)
{
	i = array[runvar];
	System.out.println(i);
}
 
Zuletzt bearbeitet:
würde dann auch das gehen:

zwei for schleifen.
Code:
if k>a.length{
k=k%a.length}


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

Neue Beiträge

Zurück