这是在某家公司面试碰到的。题目是这样的,有一个数组{1,2,3,4,5,6,7,8,9,10,11},要求三个为一组按以下形式输出:
     <div>
        <group>1,2,3</group>
        <group>4,5,6</group>
        <group>7,8,9</group>
        <group>10,11</group>
     </div>

解决方案 »

  1.   

    还能怎么高效?
    int[] a = {1,2,3,4,5,6,7,8,9,10,11};
    System.out.println("<div>");
    for (int i=0; i<a.length; i+=3) { //只能尽量减少循环次数了,3个3个循环而不是1个1个循环
        if (i < a.length - 2) {
            System.out.printf("<group>%d,%d,%d</group>\n", a[i], a[i+1], a[i+2]);
        } else if (i < a.length - 1) {
            System.out.printf("<group>%d,%d</group>\n", a[i], a[i+1]);
        } else {
            System.out.printf("<group>%d</group>\n", a[i]);
        }
    }
    System.out.println("</div>");
      

  2.   


    public static void main(String[] args) {
    int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    System.out.println("<div>");
    for (List<String> group : getList(a, 5)) { // 前面是一个div中需要显示的数据,后面是每个group中要显示几条数据,方便修改
    System.out.print("<group>");
    for (int i = 0; i < group.size(); i++) {
    String str = group.get(i);
    if (i != group.size() - 1)
    str += ",";
    System.out.print(str);
    }
    System.out.println("<group>");
    }
    System.out.println("</div>");
    } private static List<List<String>> getList(int[] div, int count) {
    List<List<String>> list = new ArrayList<List<String>>();
    List<String> group = null; // 类似SAX解析器的操作
    for (int i = 0; i < div.length; i++) {
    if (i % count == 0) { // 开始事件
    group = new ArrayList<String>();
    }
    group.add(div[i] + "");
    if (i % count == 1) { // 结束事件
    list.add(group);
    }
    if (div.length % count == 1 && i == div.length - 1) { // 是否补加
    list.add(group);
    }
    } return list;
    }
      

  3.   


    int[] nn=new int[]{1,2,3,4,5,6,7,8,9,10,11};
    StringBuilder sb=new StringBuilder();
    sb.append("<div>\n");
    for(int s=3,i=0,il=nn.length,j,jl;i<il;i+=s){
    sb.append("<group>");
    j=i;
    jl=j+s;
    if(jl>il){
    jl=il;
    }
    for(;j<jl-1;j++){
    sb.append(nn[j]+",");
    }
    sb.append(nn[j]);
    sb.append("</group>\n");
    }
    sb.append("</div>\n");
    System.out.println(sb.toString());
    如果固定是3的话就不用嵌套2层循环 直接if 判断
      

  4.   

    为什么没想到用递归?
    private static int[] div = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    private static int index = 0; public static void main(String[] args) {
     System.out.println("<div>");
     show(3);
     System.out.println("</div>");
    } private static void show(int count) {
    System.out.print("<group>");
    for (int i = index; i < div.length; i++) {
    if (i == count + index) {
    System.out.println("</group>");
    index = i;
    show(count);
    return;
    }
    System.out.print(div[i] + (i % count == count-1 || i == div.length - 1 ? "" : ","));
    }
    System.out.println("</group>");
    }