我正在为java做一系列自愿的任务,包括使用基本的数组和方法。我一直做得很好,直到遇到严重的障碍。
最初的任务是创建一个方法 rotateByN
,它应该获取一个int数组并将其旋转n步(并影响输入数组,而不是返回一个新数组)。很简单:
public class Four {
static void rotateByN(int[] in, int n) {
for (int l = 1; l <= n; l++) {
int tmp = in[0];
for (int i = 1; i < in.length; i++) {
in[i - 1] = in[i];
}
in[in.length - 1] = tmp;
}
}
public static void main(String[] args) {
int[] arr = { 2, 7, 6, 1, 0 };
rotateByN(arr, 3);
for (int r : arr) {
System.out.println(r);
}
}
}
但是,接下来的任务是将方法体中使用的分号数量减少到只有一个。我花了大约一个小时的时间在各种各样的文档中搜寻,但似乎没有什么能让我达到目的。
更令人沮丧的是,我们没有弄清楚是否可以调用以前创建的函数 rotate
(它做同样的事情,但总是正好一次)n次,但是同样,for循环需要更多分号,这是我们没有的。
我不想这么直截了当地提出要求,但我完全没有选择余地,任何形式的意见都将不胜感激。
再问了几句,结果就跟打电话一样无聊了 rotate
方法一遍又一遍。因为这只能(我认为)在for的头上加上更多的分号,也许它们不算在内。
1条答案
按热度按时间56lgkhnf1#
你可以用
Arrays.stream(int[],int,int)
方法两次获得具有指定数组范围的两个流:近和远,然后将它们交换并展平为一个流-返回新数组。那你可以用System.arraycopy
方法将旧数组的内容替换为新数组的内容。带有一个分号的长路径:或者你可以用
Arrays.copyOfRange(int[],int,int)
方法。想法是一样的:或者没有你可以使用的流
ArrayUtils.addAll(int[],int[])
方法: