下午本想學學數據結構,可是在進行寫一個兩數交換的函數上遇到了問題。在涉及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++那樣通過傳引用輕鬆實現數據交換的方法。