如何解决在java中交换数组中的元素详细参考问题
我有一个数组
int [] arr = {1,2,3,4};
问题是: 在上面的数组中,给定一个位置 = 2; 所以 arr[2] 应该与 arr[0] 交换;和数组中的其余元素应该像预期的输出一样排列:{3,1,4} 帮助我获得逻辑
我需要帮助
解决方法
任务是将数组元素向右移动到 - users
- UserAGuid
- status : online
- FriendAGuid
- status : online
- FriendBGuid
- status : offline
- friends
- UserAGuid
- FriendAGuid
- location : match
- level : 10
- status : online
- FriendBGuid : true
- location : lobby
- level : 15
- status : offline
- FriendAGuid
- UserAGuid
- location : lobby
- level : 20
- status : online
- FriendBGuid
- UserAGuid
- location : lobby
- level : 20
- status : online
处的元素,可以通过递减循环简单地解决:
- 将元素存储在
pos
:pos
; - 将元素从
tmp = arr[pos]
下移到 0 - 把
pos
放到tmp
arr[0]
但是,这个方法修改了输入数组;可以通过几个循环创建一个副本:
public static int[] shiftRightTillPos(int pos,int ... arr) {
assert pos >= 0 && pos < arr.length;
int tmp = arr[pos];
for (int i = pos; i > 0; i--) {
arr[i] = arr[i - 1];
}
arr[0] = tmp;
return arr;
}
或使用 System.arraycopy
:
public static int[] shiftRightTillPosCopy(int pos,int ... arr) {
assert pos >= 0 && pos < arr.length;
int[] res = new int[arr.length];
res[0] = arr[pos];
for (int i = 1; i <= pos; i++) {
res[i] = arr[i - 1];
}
for (int i = pos + 1; i < arr.length; i++) {
res[i] = arr[i];
}
return res;
}
最后一个选项是使用 Stream API - 使用 public static int[] shiftRightTillPosCopy(int pos,int ... arr) {
assert pos >= 0 && pos < arr.length;
int[] res = new int[arr.length];
res[0] = arr[pos];
System.arraycopy(arr,res,1,pos);
System.arraycopy(arr,pos + 1,arr.length - pos - 1);
return res;
}
加入多个流:
flatMap
,
-
使用原始副本创建一个数组,但不将值存储在 pos 处。
1,2,3,4 -> 1,4
-
将 pos 处的元素分配给数组中的第一个索引
-
从索引 1 到全长循环遍历原始数组并分配 temp 的值(注意在 temp 从一个向上开始indice-1 ) 到其余位置。
import java.util.Arrays;
public class H {
public static void main(String[] args) {
int pos = 6;
int[] arr = {4,7,6,8,5,10,9};
int[] temp = new int[arr.length-1];
for (int j = 0; j < arr.length-1; j++) {
// skip the entry at pos
if(j < pos) {
temp[j] = arr[j];
}else {
temp[j] = arr[j+1];
}
}
System.out.println(Arrays.toString(temp));
// first element initialize with element at given position
arr[0] = arr[pos];
System.out.println();
for (int i = 1; i < arr.length; i++) {
arr[i] = temp[i - 1];
}
System.out.println(Arrays.toString(arr));
}
}
输出
[5,4,9]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。