二维数组,length不固定,假设: 
String[][] strArr = { { "00", "01" }, { "10", "11", "12" } }; 
现在要把strArr分解成 
String[][] sep1={{"00"},{"10"}} 
String[][] sep2={{"00"},{"10","11"}} 
String[][] sep3={{"00"},{"10","11","12"}} 
String[][] sep4={{"00", "01" },{"10"}} 
String[][] sep5={{"00", "01" },{"10","11"}} 
String[][] sep6={{"00", "01" },{"10","11","12"}} 
然后放到collection里面,想了很久没有想出来...... 
望高手指教!!!!

解决方案 »

  1.   

    终于看明白是什么意思了啊,好像就是每一次总是拿String【0】【0】,String【1】【0】做组合,很简单啊,循环即可啊,然后累计啊
      

  2.   


    import java.util.ArrayList;public class ArrayConvert1 { ArrayList<String[][]>  alist=new ArrayList<String[][]>();

    public  void conv(String[][] strArr){
    int[] pos=new int[strArr.length];//保存需要复制的长度,0表示长度为1,依次类推。
    while(pos[0]<strArr[0].length){
    alist.add(createArray(strArr,pos));
    addPos(strArr,pos);
    }
    } public void addPos(String[][] strArr,int[] pos){
    int pow=1;
    for (int i = pos.length-1; pow > 0 && i > 0; i--) {
    pos[i]=(pos[i]+pow)%strArr[i].length;
    pow=pos[i]==0?1:0;
    }
    pos[0]+=pow;
    }
    public String[][] createArray(String[][] strArr,int[] pos){
    String[][] newarr=new String[strArr.length][];
    for(int j=0;j<strArr.length;j++){
    String[] arr=new String[pos[j]+1];

    System.arraycopy(strArr[j], 0, arr, 0, pos[j]+1);
    newarr[j]=arr;
    //输出结果数组
    for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i]+" ");
    }
    System.out.print("  |  ");
    }
    System.out.println();
    return newarr;

    public static void main(String[] args) {
    String[][] strArr = { { "00", "01" }, { "10", "11", "12" },{ "20", "21", "22" } };
    new ArrayConvert1().conv(strArr);
    }}
      

  3.   

    不提倡使用JAVA的二维数组吧   用二维数组不如用集合框架 --------初学者的感觉
      

  4.   

    要我说,直接用集合得了这样写出来效率和资源占用都不低,直接用List,每个add()里放一个数组,这不久搞定了?
      

  5.   

    题目很奇特。写了个程序。
    这下终于明白多维数组是怎么回事了。
    public class Main {    public Main() {
            start();
        }    public static void main(String[] args) {
            new Main();
        }    private void start() {
            int k = 1;
            for (int i = 0; i < strArr.length; i++) {
                k *= strArr[i].length;
            }        sep = new String[k][strArr.length][];        g(0);        for (String[][] i : sep) {
                for (String[] j : i) {
                    for (String t : j) {
                        System.out.print(t + " ");
                    }
                    System.out.print(" || ");
                }
                System.out.println("");
            }
        }    private void g(int a) {
            if (a >= strArr.length) {
                sep[s] = (String[][]) temp.clone();
                s++;
                return;
            }        for (int i = 0; i < strArr[a].length; i++) {
                temp[a] = new String[i + 1];
                for (int j = 0; j < temp[a].length; j++) {
                    temp[a][j] = strArr[a][j];
                }
                g(a + 1);
            }
        }
        private final String[][] strArr = {{"00", "01"}, {"10", "11", "12"}, {"20", "21"}};
        private String[][][] sep;
        private String[][] temp = new String[strArr.length][];
        private int s = 0;
    }
      

  6.   

    很感谢这位大侠提供的答案,我本来已经做出来了,不过用了递归,三层循环,位的传递,客户review出来说有点复杂了点
    不过你的答案貌似很简单实用,多谢辛苦付出了,只可惜身上分不过,不然多给点了