2

アルファベットの文字を含む配列があるという問題があります。配列要素を一定量動かすのに最適な方法は何だろうと思っていました。たとえば、キーが2の場合

array = "A,B,C,D,E.."

どうすれば変身後、

array = "C,D,E,F,G..."

最も簡単な解決策はifステートメントでしょうか?

ありがとう

4

4 に答える 4

3

配列を使用する必要がありますか、リストのようなコレクションはどうですか...

List<?> list = Arrays.asList('A', 'B', 'C', 'D', 'E');
Collections.rotate(list, -2);
System.out.println(list);

出力

[C, D, E, A, B]

または、プリミティブクラスラッパーの配列を使用します...たとえば、文字、整数など。これにより、ライトスルーArrays.asList()メソッドを介してコレクションを使用できるようになります...。

    final Character[] array = { 'A', 'B', 'C', 'D', 'E' };
    Collections.rotate(Arrays.asList(array), -2);
    System.out.println(Arrays.toString(array));

出力

[C, D, E, A, B]
于 2012-09-12T19:19:45.850 に答える
0

これはそれを行う必要があります:

char[] input = ...
char[] result = new char[input.length];
int shift = 2;

for(int i = 0; i < input.length; i++)
{
    result[i] = input[(i + shift) % input.length];
}

ご覧のとおり、forループが必要です。しifません。char2つすべてを左にシフトします。

結果は次のようになります。['C', 'D', ..., 'Z', 'A', 'B']

この方法は循環シフトと呼ばれます。

于 2012-09-12T18:58:33.993 に答える
0
char[] newArray = Arrays.copyRange(oldArray, shiftValue, oldArray.length);

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange(char []、int、int)

編集:配列を回転させる必要がある場合は、以下の方法を見てください:

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#rotate(java.util.List、int)

または:

Character[] arr = {'a', 'b', 'c', 'd'};
List<Character> chars = Arrays.asList(arr);
Collections.rotate(chars, -2);
arr = chars.toArray(new Character[0]);
于 2012-09-12T19:00:14.963 に答える
0

試しましたCollections.rotateか?

final Character[] vals = { 'A', 'B', 'C', 'D', 'E' };
final List<Character> list = Arrays.asList(vals);
Collections.rotate(list, -2);
/* vals will be rotated */
System.out.println(Arrays.toString(vals));

...生成します(ideoneペーストを参照):

[C、D、E、A、B]

于 2012-09-12T20:46:23.190 に答える