下午本想学学数据结构,可是在进行写一个两数交换的函数上遇到了问题。在涉及java中函数的参数传递问题上,由于java的引用已经相对于C++退化,不能像C++中通过引用传递实现实参的改变。下面是一个实现数据全排列的程序:
package dataOfStructure;
import java.util.Scanner;
/*
* 对数组中的数据进行全排列,并且涉及到java中参数的传递问题。
*/
public class dataOne
{
A[] a= new A[8];
void input()//获取随机的数字
{
Scanner sc = new Scanner(System.in);
for(int j=0;j<a.length;j++)
{
this.a[j]=new A();
this.a[j].i=sc.nextInt();
}
}
public int count=0;//记录所有的情况
public void perm(A a[],int k,int n)
{
int i;
if(k==1)
{
for(i=0;i<n;i++)
{
System.out.print(a[i].i);
}
System.out.println();
this.count++;
}
else
{
for(i=n-k;i<n;i++)
{
this.swap(a[i],a[n-k]);
this.perm(a,k-1,n);
this.swap(a[i],a[n-k]);
}
}
}
public void swap(A aa,A bb)
{
A temp = new A();
temp.i=aa.i;
aa.i=bb.i;
bb.i=temp.i;
}
public static void main(String[] args)
{
dataOne da = new dataOne();
da.input();
da.perm(da.a, 5,da.a.length );
System.out.println("得到的全排列数目为:"+da.count);
}
}
class A //利用对象引用来实现参数的传递
{
public int i;
}
由于基础比较差,没有想到更好的方法来实现java中像C++那样通过传引用轻松实现数据交换的方法。