我有一个问题,其中包含字母表中的字母数组。我想知道将数组元素移动一定数量的最佳方式是什么。例如,如果关键是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
声明?
感谢
这应做到:
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
s两个转移到左边。
其结果将是:['C', 'D', ..., 'Z', 'A', 'B']
这种方法被称为一个circular shift。
如果我做了input.length - 2,那会给我一个24的数组。如果我希望它的大小是26,那么Z映射到B?对不起,没有说清楚。 – AkshaiShah
@AkshaiShah啊,我明白了。更新了我的答案。 – Baz
忘了问模数input.length是做什么的? – AkshaiShah
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]);
我认为这样做会完成这项工作,只是想知道从= 2开始,还是= 1,这是否意味着我的新阵列将从B开始并以A结尾? – AkshaiShah
它会抛出一个'IllegalArgumentException'。如果你需要从>到,那么编写你自己的实现会容易得多。 – jn1kk
你必须使用数组,如何收集,如列表...
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]
对不起我的朋友,不得不使用数组 – AkshaiShah
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 paste):
[C,d,E,A,B]
你说你有一个*阵列*,但你的变量实际上看起来像一个*字符串*包含逗号分隔值? – ruakh
所以在转换之后,A和B是在列表的末尾还是被截断? – Mike
@ monkybonk05根据我的回答评论,OP希望他们在列表的末尾。 – Baz