请各位大神帮忙看看,结果不一样

reenjie 2018-11-12 07:49:52
在代码中实现一组数字的全排列。当LZ在sort()方法中有实现并添加到list中,但是在最后访问的时候,list中保存的数据却是一样的。请各位帮忙看一下是什么问题。

import java.util.ArrayList;
public class Queen{
static ArrayList<int[]> list=new ArrayList<int[]>();

public static void sort(int[] queen,int index){
if(queen==null||queen.length==0){
return;
}
if(index==queen.length){
list.add(queen);
int[] arr=list.get(list.size()-1);
System.out.println(list.size());
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
}
for(int i=index;i<queen.length;i++){
swap(queen,i,index);
sort(queen,index+1);
swap(queen,i,index);
}
}

public static void swap(int[] arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}

public static void main(String[] args){
Queen q=new Queen();
int[] queen=new int[3];
for(int i=0;i<3;i++){
queen[i]=i;
}
sort(queen,0);
System.out.println();

for(int i=0;i<list.size();i++){
int[] arr=list.get(i);
for(int j=0;j<arr.length;j++){
System.out.print(arr[j]+" ");
}
System.out.println();
}
}
}
...全文
77 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2018-11-13
  • 打赏
  • 举报
回复
List add的是同一queen,当然结果都一样了 改成add queen的拷贝 即list.add(queen);改成 int[] q = new int[queen.length]; q = Arrays.copyOf(queen, queen.length); list.add(q);
reenjie 2018-11-13
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
List add的是同一queen,当然结果都一样了 改成add queen的拷贝 即list.add(queen);改成 int[] q = new int[queen.length]; q = Arrays.copyOf(queen, queen.length); list.add(q);
明白了,是引用类型的问题,我写的方法中queen指向的地址一直没有改变,导致存放的值也不变的。 谢谢你的帮助。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧