アルファベットの文字を含む配列があるという問題があります。配列要素を一定量動かすのに最適な方法は何だろうと思っていました。たとえば、キーが2の場合
と
array = "A,B,C,D,E.."
どうすれば変身後、
array = "C,D,E,F,G..."
最も簡単な解決策はif
ステートメントでしょうか?
ありがとう
アルファベットの文字を含む配列があるという問題があります。配列要素を一定量動かすのに最適な方法は何だろうと思っていました。たとえば、キーが2の場合
と
array = "A,B,C,D,E.."
どうすれば変身後、
array = "C,D,E,F,G..."
最も簡単な解決策はif
ステートメントでしょうか?
ありがとう
配列を使用する必要がありますか、リストのようなコレクションはどうですか...
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]
これはそれを行う必要があります:
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
ません。char
2つすべてを左にシフトします。
結果は次のようになります。['C', 'D', ..., 'Z', 'A', 'B']
この方法は循環シフトと呼ばれます。
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]);
試しました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]