多数组合并问题

问题描述:

现在有多组整数数组,需要将他们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。如样例1,获得长度3,先遍历第一行,获得2,5,6;再遍历第二行,获得1,7,4;再循环回到第一行,获得7,9,5;再遍历第二行,获得3,4;再回到第一行,获得7,按顺序拼接成最终结果。

package Shuru_lianxi;



import java.util.ArrayList;

import java.util.Scanner;



public class biShi {



   public static boolean isNull(ArrayList<String> gh) {

      int i = 0;

      for (i = 0; i < gh.size(); i++) {

         if (gh.get(i) != null)

            break;

      }

      if (i < gh.size()) {

         return false;

      } else {

         return true;

      }

   }



   public static void Alg(ArrayList<String> ma, int num) {

      String tem = "";// 作为最后的返回结果

      while (!isNull(ma)) {

         for (int i = 0; i < ma.size(); i++) {

            String sk = ma.get(i);

            if (sk == null) {

               continue;

            }

            String[] gg = sk.split(",");

            if (sk.length() == 0) {

               ma.set(i, null);// 删掉取完的内容

            } else {

               if (gg.length <= num) {

                  tem = tem + sk + ",";

                  ma.set(i, null);

               } else {

                  for (int k = 0; k < num; k++) {

                     tem = tem + gg[k] + ",";

                  }

                  String hh = "";

                  for (int l = num; l < gg.length; l++) {

                     if (l == gg.length - 1) {

                        hh = hh + gg[l];

                     } else {

                        hh = hh + gg[l] + ",";

                     }

                  }

                  // 将没取完的数组重新覆盖

                  ma.set(i, hh);

               }

            }

         }

      }

      System.out.println(tem.substring(0, tem.length() - 1));

   }



   public static void main(String[] args) {

      Scanner sc = new Scanner(System.in);

      int num = sc.nextInt();

      ArrayList<String> ma = new ArrayList<String>();

      sc.nextLine();// nextInt()会留下一个回车,需要消除,否则后边会出错

      while (!sc.hasNext("#")) {// 以#结束,这里你可以修改成其他的

         ma.add(sc.nextLine());

      }

      Alg(ma, num);

   }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值