2016-05-05 12 views
0

Also als Teil der Vector Klasse, die ich versuche zu erstellen, möchte ich auch die Fähigkeit für den Benutzer in der Lage sein, die Elemente im Array eine 'n' Anzahl der Plätze je nachdem, was ist angegeben. Wenn der Benutzer eine Zahl eingibt, die größer als die Array-Größe ist, werden die Elemente zum Anfang und Verschieben zurück verschoben. Ein Beispiel wäre:Moving Array-Elemente links und rechts

1 2 3 4 (shifted 1) => 4 1 2 3 

1 2 3 4 (shifted 4) => 1 2 3 4 

1 2 3 4 (shifted 5) => 4 1 2 3 

ich viel Code nicht so weit haben, außer:

public Vector shifted(int amount) { 
    Vector vectorShifted = new Vector(length); 

    for (int i = 0; i < length; i++); 
    vectorShifted.elements[i] = this.elements[i + amount] 
    } 
    return vectorShifted; 
} 

Allerdings, wenn ich dieses Programm und eine Zahl größer als length eingegeben laufen, wird ein Fehler angezeigt . Gibt es eine Möglichkeit, diesen Code dahingehend zu modifizieren, dass eine beliebige Zahl, positiv oder negativ, eingegeben werden kann und die Werte verschoben werden?

+0

Wie Sie machen eine zirkulare Verschiebung, fügen Sie den Modulo-Operator hinzu: 'vectorShifted.elements [i] = this.elements [(i + betrag)% length]' – lazary

Antwort

0

Genau wie lazary2 sagte, können Sie den Modulo-Operator%

ändern können: vectorShifted.elements[i] = this.elements[i + amount]

zu vectorShifted.elements[i] = this.elements[(i + amount) % length]

Wenn Sie Array verwenden möchten:

Integer[] array = {0,1,2,3,4}; Collections.rotate(Arrays.asList(array), 3); System.out.println(Arrays.toString(array)); //[2, 3, 4, 0, 1]

+0

Wenn ich dieses Programm starte, scheint es es nach links anstatt nach rechts zu verschieben. Wie könnte ich das vielleicht beheben? –

+0

Ich nehme an, dass Sie Ihren Code nicht geschrieben haben. Wenn Sie möchten, versuchen Sie, Arrays zu verwenden. Collections.rotate (Arrays.asList (Array), 3); Wenn Sie Vektor verwenden müssen, können Sie den Code schreiben, den Sie verwenden? – jsurf