package com.gnnu2016;import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class randomAssortment { /** * 定義一個保存所有隨機(jī)組合情況的動態(tài)數(shù)組 */ public static ArrayList<String>list=new ArrayList<String>(); public static void main(String[] args) { long num = -1; Scanner input=new Scanner(System.in); do{ System.out.println("請輸入一個正整數(shù):"); try{ num=input.nextInt(); }catch(Exception e){ input.nextLine(); System.out.println("輸入錯誤,請重新輸入!!"); } }while(num<0); String string=Long.toString(num); String[]strings=string.split(""); //調(diào)用函數(shù),實現(xiàn)對list的填充所有的排列組合情況 getRandom(strings,0,strings.length-1); //打印輸出所有情況 System.out.println("一共有"+list.size()+"種不同的排列,分別是:"); for(int i=0;i<list.size();i++){ System.out.print(list.get(i)+" ?"); if((i+1)%10==0){ System.out.println(); } } System.out.println(); } public static void getRandom(String[]strings,int start,int end){ StringBuffer sBuffer=new StringBuffer(); String string=null; /* * 一種排列情況已經(jīng)出來了 */ if(start==end){ for(int i=0;i<=end;i++){ sBuffer.append(strings[i]); } string=sBuffer.toString(); //判斷該組合情況是否已經(jīng)存在,如果不存在就添加該情況 if(!list.contains(string)){ list.add(string); } }else{ for(int i=start;i<=end;i++){ String temp=strings[start];//主要是else里面這段代碼怎么理解?? strings[start]=strings[i]; strings[i]=temp; //遞歸調(diào)用 getRandom(strings, start+1, end); temp=strings[start]; strings[start]=strings[i]; strings[i]=temp; } } }}