我现在有两个知道长度的数组,比如说al.size()=33  al2.size()=50;
1.将这两个数组中的元素,按照当al放3个元素,al2就得放7个元素的比例 逐个的放入一个10元素为一批新的数组中;
2.如果最后al2不够7个了只剩下了6个,而al1还有4个元素以上,那么由al1就向后多拿出1个元素,al2全拿出来,(al1:4 al2:6)比例可以不是3:7,但是总数一定要到3+7=10,
3.如果最后连10个都没有,那么有多少就放多少
 结果
写个方法通过al1 al2 把这个新数组组合起来

解决方案 »

  1.   

    先实例化一个新数组。新数组长度肯定是83吧。
    while询盘判断al1和al2的长度,大于3和7的话进行下面的。
    {
    新数组的前三个由al1的前三个赋值给,后7个由al2赋值。
    并记录al1,al2的下标,下一次从下标的下一个开始。
    }
    不符合的话这情况再写一个处理一下就行了。
      

  2.   

    int a[]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1};
    int b[]={4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6,7,8,9,10,4,5,6};
    int c[]=new int[a.length+b.length];
    int i=0,j=0;
    for(;i<a.length && j<b.length;){
    if((i+j)%10<3 || b.length-j+(i+j)%10<10)//前三个,或者b不足7个时,比如6个,则是前4个
    c[i+j]=a[i++];
    else
    c[i+j]=b[j++];
    }
    for(;i<a.length;i++){
    c[i+j]=a[i];
    }
    for(;j<b.length;j++){
    c[i+j]=b[j];
    }

    for(i=0;i<c.length;i++)
    System.out.println(c[i]);
      

  3.   


    import java.util.Arrays;public class Test {
    public static void main(String[] args) {
    int[] a1 = new int[33];
    int[] a2 = new int[50];
    // 初始化
    for (int i = 0; i < a1.length; ++i) {
    a1[i] = 101 + i;
    }
    for (int i = 0; i < a2.length; ++i) {
    a2[i] = 201 + i;
    }
    System.out.println(Arrays.toString(union(a1, a2)));
    } private static int[] union(int[] a1, int[] a2) {
    int[] result = new int[a1.length + a2.length];
    final int count1 = 3, count2 = 7,count = count1 + count2;
    int i1 = 0, i2 = 0, i3 = 0;
    while (i1 + count1 < a1.length && i2 + count2 < a2.length) {
    for (int i = 0; i < count1; ++i) {
    result[i3++] = a1[i1++];
    }
    for (int i = 0; i < count2; ++i) {
    result[i3++] = a2[i2++];
    }
    }
    if (a1.length - i1 > a2.length - i2
    && (a1.length + a2.length - i1 - i2 > count)) {
    for (int i = 0; i < count - (a2.length - i2); ++i) {
    result[i3++] = a1[i1++];
    }
    for (int i = i2; i < a2.length; ++i) {
    result[i3++] = a2[i2++];
    }
    }
    for (int i = i1; i < a1.length; ++i) {
    result[i3++] = a1[i1++];
    }
    for (int i = i2; i < a2.length; ++i) {
    result[i3++] = a2[i2++];
    }
    return result;
    }}
      

  4.   

    刚刚说的不是很清楚。。,我想得到的结果是
    [[a1,a2,a3,b1,b2,b3,b4,b5,b6,b7],[a4,a5,a4,b8,b9,b10,b11,b12,b13,b14],[..],[..],....]
      

  5.   


    import java.util.ArrayList;
    import java.util.Arrays;public class Test {
    public static void main(String[] args) {
    int[] a1 = new int[33];
    int[] a2 = new int[50];
    // 初始化
    for (int i = 0; i < a1.length; ++i) {
    a1[i] = 101 + i;
    }
    for (int i = 0; i < a2.length; ++i) {
    a2[i] = 201 + i;
    }
    ArrayList<int[]> list = union(a1, a2);
    for (int[] arr : list) {
    System.out.println(Arrays.toString(arr));
    }
    } private static ArrayList<int[]> union(int[] a1, int[] a2) {
    int[] a3 = new int[a1.length + a2.length];
    final int count1 = 3, count2 = 7, count = count1 + count2;
    int i1 = 0, i2 = 0, i3 = 0;
    while (i1 + count1 < a1.length && i2 + count2 < a2.length) {
    for (int i = 0; i < count1; ++i) {
    a3[i3++] = a1[i1++];
    }
    for (int i = 0; i < count2; ++i) {
    a3[i3++] = a2[i2++];
    }
    }
    if (a1.length - i1 > a2.length - i2
    && (a1.length + a2.length - i1 - i2 > count)) {
    for (int i = 0; i < count - (a2.length - i2); ++i) {
    a3[i3++] = a1[i1++];
    }
    for (int i = i2; i < a2.length; ++i) {
    a3[i3++] = a2[i2++];
    }
    }
    for (int i = i1; i < a1.length; ++i) {
    a3[i3++] = a1[i1++];
    }
    for (int i = i2; i < a2.length; ++i) {
    a3[i3++] = a2[i2++];
    }
    ArrayList<int[]> result = new ArrayList<int[]>();
    for (int i = 0; i < a3.length; i += count) {
    int offset = i + count < a3.length ? count : a3.length - i;
    int[] arr = Arrays.copyOfRange(a3, i, i + offset);
    result.add(arr);
    }
    return result;
    }}
      

  6.   

    我把它放到二维数组了,现在的问题就是最后一行可能不足10个,后面的是0
    所以你打印的时候判断到a.length+b.length就可以了
    int a[] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2,
    3, 1, 2, 3, 1, 2, 3 };
    int b[] = { 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8,
    9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7,
    8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6 };
    int c[][] = new int[(a.length + b.length) / 10 + 1][10];
    int i = 0, j = 0;
    for (; i < a.length && j < b.length;) {
    if ((i + j) % 10 < 3 || b.length - j + (i + j) % 10 < 10)// 前三个,或者b不足7个时,比如6个,则是前4个
    c[(i + j) / 10][(i + j) % 10] = a[i++];
    else
    c[(i + j) / 10][(i + j) % 10] = b[j++];
    }
    for (; i < a.length; i++) {
    c[(i + j) / 10][(i + j) % 10] = a[i];
    }
    for (; j < b.length; j++) {
    c[(i + j) / 10][(i + j) % 10] = b[j];
    } for (i = 0; i < c.length; i++) {
    for (j = 0; j < 10; j++)
    System.out.print(c[i][j] + " ");
    System.out.println();
    }
      

  7.   

    算了啊。。
    int a[] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2 };
    int b[] = { 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8,
    9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7,
    8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5 };
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 4 5 6 7 8 9 10 4 
    5 0 0 0 0 0 0 0 0 0
      

  8.   

    高手 我的想把那两个数组都换成ArrayList<String>的 该怎么改??
      

  9.   

    int c[][] = new int[(a.length + b.length) / 10 + 1][10];
    把这一行改成这样好了。。
    int c[][] = new int[(a.length + b.length + 9) / 10][10];
      

  10.   


    我说的你没弄清楚 你的算法有问题
    int a[] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2,
    3, 1, 2, 3, 1, 2, 3 ,4,5};
    int b[] = { 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8,
    9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7,
    8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6,16,26,36,46,56,66 };试试这个参数用你的算法算
      

  11.   

    高手 我的两个数组存放的都是String类型的元素 我的想把那两个数组都换成ArrayList<String>的 该怎么改??
    private static ArrayList union(ArrayList<String>  a1, ArrayList<String>  a2) {
    .....
    里面改成什么
    .....
    }
      

  12.   

    public static ArrayList<ArrayList<String>> merge(ArrayList<String> a,
    ArrayList<String> b) {
    ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
    ArrayList<String> temp = null;
    int i = 0, j = 0;
    for (; i < a.size() || j < b.size();) {
    if ((i + j) % 10 == 0) {
    if (temp != null)
    result.add(temp);
    temp = new ArrayList<String>();
    }
    if (i < a.size()
    && ((i + j) % 10 < 3 || b.size() - j + (i + j) % 10 < 10 || j >= b
    .size()))
    temp.add(a.get(i++));
    else
    temp.add(b.get(j++));
    }
    result.add(temp);
    return result;
    }
    ArrayList没怎么用过,不知道会不会有问题。
      

  13.   

    用linkedlist写了个,最后返回的是一个一维数组。也还好改啦
    public class arrylist {



    public String[] join(String[] a,String[] b){

    //验证了linkedlist是个环状结构

    LinkedList<String> al = new LinkedList<String>();
    for(int i = 0 , length = a.length;i<length;i++){
    al.add(a[i]);
    }
    LinkedList<String> bl = new LinkedList<String>();
    for(int i = 0 , length = b.length;i<length;i++){
    bl.add(b[i]);
    }

    LinkedList<String> cl = new LinkedList<String>(); 

    while(al.size() != 0){
    if(bl.size()>7){
    for(int i=0;i<3;i++){
    if(al.peek() != null){
    cl.add(al.pollFirst());
    }else{
    break;
    }

    }
    for(int l=0;l<7;l++){
    if(bl.peek() != null){
    cl.add(bl.pollFirst());
    }else {
    break;
    }

    }
    }else{
    for(int i = 0,lengtha = (10-bl.size());i < lengtha;i++){
    if(al.peek() != null){
    cl.add(al.pollFirst());
    }else{
    break;
    }
    }
    for(int l=0,lengthb = bl.size();l<lengthb;l++ ){
    if(bl.peek() != null){
    cl.add(bl.pollFirst());
    }else {
    break;
    }
    }
    }
    }

    String[] tmp= new String[]{};

    if(cl.isEmpty()){
    return tmp;
    }else{
    tmp = cl.toArray(new String[0]); 
    return tmp;
    }


    }

    public static void main(String[] args){
     String[] A = {};
     String[] B = {};

     arrylist test = new arrylist();
     test.join(A,B);
     
    }

    }
      

  14.   

    自己调了下有个地方有BUG
    while语句得改一下
    while(!(al.size() == 0 && bl.size() == 0))