JAVA算法,判断年月的连续性

判断一组年月数据是否连续,不交叉
比如 2012-01 2012-01 这样的数据认为是正确的,2012-01 2050-12 这样的数据也是正确的
但2012-01 2012-01 2012-01 2050-12 这样的数据是错误的
正确的应该是2012-01 2012-01 2012-02 2050-12
同样一个月份最多出现两次,2050-12是特殊年月
再举两个例子 比如 2012-01 2012-02 2013-03 2050-12 正确
2012-01 2012-02 2013-04 2050-12 错误
因为中间缺少了一个2012-03
btboy1978 你好
每个数组里面应该只含有两个年月
数组1【2012-01,2012-02】
数组2【2014-01,2012-02】
数组3【2015-01,2012-02】
数组4【2016-01,2012-02】
校验数组1到4里的年月是否连续,不中断

看不明白,同年的话就是每个月都是连续的么?

 不同年的呢,?

2050-12特殊年月是何意?

public static boolean findThree(String[] years) {
        boolean flag = false;
        all: for (int i = 0; i < years.length; i++) {
            int num = 0;
            for (int j = 0; j < years.length; j++) {
                if (years[i].equals(years[j]))
                    num++;
                if (num == 3)
                    flag = true;
                break all;
            }
        }
        return flag;
    }

    public static boolean tabCheck(String[] years) {
        //System.out.println(years[i].substring(0, 4));
        boolean flag = false;

        for (int i = 0; i < years.length - 1; i++) {
            System.out.println(years[i].substring(0, 4));
            System.out.println(years[i].substring(6, 7));
            if (years[i].substring(0, 4).equals(years[i + 1].substring(0, 4))            
                    && Integer.valueOf(years[i + 1].substring(6, 7))
                            - Integer.valueOf(years[i].substring(6, 7)) > 1)
                flag = true;
            break;
        }

        return flag;

    }
    
    public static void main(String[] args) {
        String[] years={"2012-01","2012-04","2012-05","2012-06","2012-07","2050-12"};
        if(tabCheck(years)||findThree(years))
            System.out.println("不合格");
        else
            System.out.println("合格");
    }
    
    //////////////////////////////////////////////////////////////////////
    
    //如果只有两组年月的话,只有两种情况了,一种是同年隔一月,
    //一种是隔年首尾相接
    public boolean IsNext(String[] years){        
        Arrays.sort(years);        
        if(years[0].substring(0, 4).equals(years[1].substring(0, 4))){
            if(Integer.valueOf(years[1].substring(6, 7))-Integer.valueOf(years[0].substring(6, 7))==1)
            return true;    
        }else if(Integer.valueOf(years[1].substring(0, 4))-Integer.valueOf(years[0].substring(0, 4))==1&&
                Integer.valueOf(years[0].substring(6, 7))==12&&Integer.valueOf(years[1].substring(6, 7))==1){
            return true;
        }
        return false;
        
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-15
题目描述不是完全清楚,我先按照我能理解的部分给一个朴素的算法。

输入所有年月至数组date[],扫描若干次:
第一次扫描,删除所有的2050-12,同时判断所有数据是否有序(即:对任意i应该有date[i] <= date[i+1]),若发现任意位置无序则return false;
第二次扫描,判断是否有月份出现多于2次,并删除所有重复,若发现出现多于2次的月份则return false;
第三次扫描,此时对于任一个date[i],date[i+1]应该是其紧接着的下个月。发现不符合者则return false;
三次扫描通过,return true。
相似回答