年     月
    1991     11
    1991     12
    1992     01
    1992     08
    1992     09
    1992     10
    1993     10
    1994     05
    1994     06     
组成之后效果变成开始年月 终止年月
 199111          199201
 199208          199210
 199310          199310
 199405          199406
那位大侠能指导下啊?用java代码

解决方案 »

  1.   


    package com.test;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;public class Test { public static void main(String[] args){
    Map<String,String> map=new HashMap<String,String>();
    String[] data={"1991-11","1991-12","1992-01","1992-08","1992-09","1992-10","1993-10","1994-05","1994-06"};
    for(int i=0;i<data.length;i++){
    String one=data[i];
    String[] new1=one.split("-");
    for(int j=0;j<data.length;j++){
    String two=data[j];
    String[] new2=two.split("-");
    if((new1[0].equals(new2[0]) && (Integer.valueOf(new2[1])-Integer.valueOf(new1[1])==1))){//这里循环判断同年不同月的
    System.out.println(one+"------"+two);
    map.put(one, two);
    }else if(new1[1].equals("12") && new2[1].equals("01") && (Integer.valueOf(new2[0])-Integer.valueOf(new1[0])==1)){//这里判断年相差1年,月分别是12和01月
    System.out.println(one+"*****"+two);
    map.put(one, two);
    }
    }
    }

    //这里遍历数据,看那些数据在map里面存在,则放入map中,键,值都是本身
    for(int i=0;i<data.length;i++){
    if(!map.containsKey(data[i]) && !map.containsValue(data[i])){
    map.put(data[i], data[i]);
    }
    }

    //这里是结果的result Map对象,处理类容
    //1992-08 1992-09 和1992-09 1992-10组合成1992-08 1991-10
    Map<String,String> result=new HashMap<String,String>();
    for(String key:map.keySet()){
    String value=map.get(key);
    if(map.containsKey(value)){
    result.put(key, map.get(value));
    }else if(!map.containsValue(key)){
    result.put(key, value);
    }

    }

    for(String key:result.keySet()){
    System.out.println(key+" "+result.get(key));
    }






    }
    }
      

  2.   

    我今天测试了下你的方法,当data里面的数据都是连续的则有问题?
      

  3.   

    package test;public class T1 {
    /**
     * @param args
     */
    static int year[] = { 1991, 1991, 1992, 1992, 1992, 1992, 1993, 1994, 1994 };
    static int month[] = { 11, 12, 1, 8, 9, 10, 10, 05, 06 };
    static int pointer = 0; public static int next() {
    if (pointer >= year.length) {
    return -1;
    }
    return pointer++;
    } /**
     * 是否为连续的年月
     * 
     * @param y1
     * @param m1
     * @param y2
     * @param m2
     * @return
     */
    static boolean isSequence(int y1, int m1, int y2, int m2) {
    if (y1 == y2) {
    return m2 - m1 == 1;
    }
    return m1 == 12 && m2 == 1;
    } public static void main(String[] args) {
    int p = next();
    int tmp = -1;
    while (p != -1) {
    // 如果是第一个数,则打印
    if (tmp == -1) {
    System.out.printf("%4d%02d\t", year[p], month[p]);
    }
    tmp = next();
    // 如果没有下一个数,则输出返回
    if (tmp == -1) {
    System.out.printf("%4d%02d\n", year[p], month[p]);
    break;
    }
    // 如果是顺序的,则记录新的编号
    if (isSequence(year[p], month[p], year[tmp], month[tmp])) {
    p = tmp;
    continue;
    }
    // 输出尾巴
    System.out.printf("%4d%02d\n", year[p], month[p]);
    // 准备下一组
    p = tmp;
    tmp = -1;
    }
    }
    }
      

  4.   

    LZ,要详细的话,加我QQ吧。472231424,
    我那算法可能还有待改进,没有做太多测试,就只针对你的那个数据来写的!
      

  5.   

    1.数据是怎么插入数据的啊?先有明细表的数据,再有主表的?感觉应该先有主表,再有明细啊
    2.是否可以根据查询条件后加order by year,month,取第一条数据作为开始时间,最后一条作为结束时间