zoukankan      html  css  js  c++  java
  • 测试两题

    package com.cqsw.untitled9.demo2;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    /**
     * @author 代杭
     * @EMAIL 2366567504@qq.com
     * @QQ 2366567504
     * @PHONE 15123644617
     * @WECHAT dh5757124
     * @DESC
     */
    public class Demo1 {
    	public static void main(String[] args) {
    		/*输入a数组*/
    		int[] a = new int[]{1, 5, 8, 11, 16, 17, 29, 34, 39};
    		/*目标time_line*/
    		int[] time_line = new int[]{3, 7, 12, 17, 19, 31, 40};
    		/*结果Map*/
    		List<HashMap<String, Integer>> resultList = new ArrayList<>();
    		/*排除数组a索引的集合*/
    		List<Integer> excludeAArray = new ArrayList<>();
    		for (int i : time_line) {
    			/*找到当前这个元素的最近值*/
    			int result = findTimeLineLately(i, a, excludeAArray);
    			HashMap<String, Integer> itemMap = new HashMap<>();
    			itemMap.put("line",i);
    			itemMap.put("time",result);
    			resultList.add(itemMap);
    		}
    		/*循环遍历,当前也可以直接在上面遍历,如果仅仅是遍历,那么干脆都可以不用resultList来存放结果*/
    		for (HashMap<String, Integer> stringIntegerHashMap : resultList) {
    			System.out.println(stringIntegerHashMap);
    		}
    	}
    
    	/**
    	 * @param target
    	 * @param a
    	 * @param excludeAArray
    	 * @return
    	 */
    	public static int findTimeLineLately(int target, int[] a, List<Integer> excludeAArray) {
    		/*找到符合标准的索引集合,如果有多个默认选最后一个*/
    		List<Integer> indexList = new ArrayList<>();
    		/*记录当前符合的值*/
    		int conformValue = Integer.MAX_VALUE;
    		for (int i = 0; i < a.length; i++) {
    			boolean isHave = false;
    			/*查看排除索引集合中是否存在,如果存在,则下一轮*/
    			for (Integer integer : excludeAArray) {
    				if (i == integer) {
    					isHave = true;
    				}
    			}
    			if (isHave) {
    				continue;
    			}
    			/*拿到当前值*/
    			int item = a[i];
    			/*相差的值*/
    			int value = Math.abs(target - item);
    			/*如果当前符合的值比我们的相差值大,那么更新符合的值*/
    			if (conformValue > value) {
    				conformValue = value;
    				/*找到了新的值,将符合标准的索引集合情况重新添加*/
    				indexList.clear();
    				indexList.add(i);
    			} else if (conformValue == value) {
    				/*如果相差值相同,那么再加入一个索引*/
    				indexList.add(i);
    			}
    		}
    		/*加入索引*/
    		excludeAArray.add(indexList.get(indexList.size() - 1));
    		/*返回最后一个数据*/
    		return a[indexList.get(indexList.size() - 1)];
    	}
    }
    
    
    package com.cqsw.untitled9.demo2;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    /**
     * @author 代杭
     * @EMAIL 2366567504@qq.com
     * @QQ 2366567504
     * @PHONE 15123644617
     * @WECHAT dh5757124
     * @DESC
     * 大致思路:
     * 1、用户输入日期,转换为Date记作nowDate,其中可以做格式校验,try一下就行了。
     * 2、使用Calendar获取年、月、日、时、分、秒、星期,注意时要获取24小时制度的
     * 3、如果是星期天,则增加一天的时间,然后赋值给nowDate
     * 4、如果是星期六,则增加两天的时间,然后赋值给nowDate
     * 5、后面都是对小时数的判断,小时记作hour
     * 6、如果hour <= 8,则直接将hour看为8,然后加上三小时
     * 7、如果hour <= 12,那么hour+3,然后-12记作remainder,然后拿到当天下午的两点时间+remainder就是结果
     * 8、如果hour <= 14,则直接将hour看为14,然后加上三小时
     * 9、如果hour < 18,则hour+3-18记作remainder,然后拿到第二天的上午八点时间+remainder就是结果
     * 10、如果hour >= 18,则直接跳到第二天上午八点,然后加上三小时
     * 11、注意在第9和第10点的时候,可能出现第二天是星期六的情况,所以我们在printDate中再次判断了星期
     */
    public class Demo2 {
    
    	/*两种转换格式*/
    	private static SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
    	private static SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    	public static void main(String[] args) throws ParseException {
    
    		 Date nowDate = simpleDateFormat2.parse("2020-03-21 04:23:31");
    		/*模拟当前输入时间,实际输入的时候转换为Date即可。*/
    		// Date nowDate = new Date();
    		/* 测试hour <= 8的情况,输出:2020-10-12 11:11:31 */
    		// Date nowDate = simpleDateFormat2.parse("2020-10-16 7:11:31");
    		/* 测试hour <= 12的情况,输出:2020-10-12 16:11:31*/
    		// Date nowDate = simpleDateFormat2.parse("2020-10-10 11:11:31") ;
    		/* 测试hour <= 14的情况,输出:2020-10-12 17:11:31*/
    		// Date nowDate = simpleDateFormat2.parse("2020-10-10 13:11:31") ;
    		/* 测试hour < 18并且第二天是星期六的情况,输出:2020-10-13 08:11:31*/
    		// Date nowDate = simpleDateFormat2.parse("2020-10-16 15:11:31") ;
    		/* 测试hour >= 18并且第二天是星期六的情况,输出:2020-10-13 11:11:31*/
    		// Date nowDate = simpleDateFormat2.parse("2020-10-16 19:11:31") ;
    
    		System.out.println("输入日期:" + simpleDateFormat2.format(nowDate));
    		/*判断是否为周一~周五,如果是,那么加上两天时间*/
    		Calendar calendar = Calendar.getInstance();
    		calendar.setTime(nowDate);
    		/*获得星期,1~7:对应日~六*/
    		int week = calendar.get(Calendar.DAY_OF_WEEK);
    		/*如果星期日,加入1天*/
    		if (week == 1) {
    			nowDate = new Date(nowDate.getTime() + 1000 * 60 * 60 * 24);
    		} else if (week == 7) {
    			/*星期六,加入两天*/
    			nowDate = new Date(nowDate.getTime() + 1000 * 60 * 60 * 24 * 2);
    		}
    		/*更换天数后重新设置值*/
    		calendar.setTime(nowDate);
    		/*========此时一定是周一~周五========*/
    		/*获得小时*/
    		int hour = calendar.get(Calendar.HOUR_OF_DAY);
    		/*分秒毫秒*/
    		int minute = calendar.get(Calendar.MINUTE);
    		int second = calendar.get(Calendar.SECOND);
    		int mm = calendar.get(Calendar.MILLISECOND);
    		/*
    		 * 如果hour <= 8,那么我们直接给它跳到八点,因为休息时间忽略掉,然后加上三小时,也就是十一点。
    		 * 样例输入:(例如不考虑周末周六,只考虑时分秒的情况)
    		 *  04:11:31,先转换为08:11:31,然后+3=>11:11:31
    		 * */
    		if (hour <= 8) {
    			nowDate = new Date(toYearMonthDayDate(nowDate).getTime() + 1000 * 60 * 60 * 11 + minute * 60 * 1000 + second * 1000 + mm);
    			printDate(nowDate,calendar);
    			return;
    		}
    		/*
    		 * 如果小于12,那么说明就是9~12之间,+3以后,直接转到两点,然后加完后的值-12,然后用下午两点加上余数,并加上分秒毫秒。
    		 * 样例输入:(例如不考虑周末周六,只考虑时分秒的情况)
    		 *      10:11:11,+3后得13:11:11,然后13-12得1.
    		 *      然后14:00:00+1小时11分11秒=>15:11:11
    		 * */
    		if (hour <= 12) {
    			int remainder = hour + 3 - 12;
    			nowDate = new Date(toYearMonthDayDate(nowDate).getTime() + 1000 * 60 * 60 * (14 + remainder) + minute * 60 * 1000 + second * 1000 + mm);
    			printDate(nowDate,calendar);
    			return;
    		}
    		/*如果hour <= 14,那么全都按照14来算,然后加入3小时*/
    		if (hour <= 14) {
    			nowDate = new Date(toYearMonthDayDate(nowDate).getTime() + 1000 * 60 * 60 * 17 + minute * 60 * 1000 + second * 1000 + mm);
    			printDate(nowDate,calendar);
    			return;
    		}
    		/**
    		 * 如果 hour < 18,那么直接相加,然后-18,多出来的时间放到第二天去加上就可以了,
    		 * 例如:(例如不考虑周末周六,只考虑时分秒的情况)
    		 *      2020-11-11 17:11:11 ->+3后 20:11:11,然后20-18等于2,然后到第二天2020-11-12 8:11:11+2 => 最终结果就位2020-11-12 10:11:11
    		 */
    		if (hour < 18) {
    			int remainder = hour + 3 - 18;
    			nowDate = new Date(toYearMonthDayDate(nowDate).getTime() + 1000 * 60 * 60 * (32 + remainder) + minute * 60 * 1000 + second * 1000 + mm);
    			/*防止到星期六的情况,所以重新设置Time*/
    			calendar.setTime(nowDate);
    			printDate(nowDate,calendar);
    			return;
    		}
    		/*
    		 * 如果hour >= 18,那么直接转到第二天上午八点,然后加上三小时,
    		 * 例如:(例如不考虑周末周六,只考虑时分秒的情况)
    		 *      9-11 19:11:11,直接转到第二天,9-12 8:11:11,然后加3=9-12 11:11:11*/
    		if (hour >= 18) {
    			nowDate = new Date(toYearMonthDayDate(nowDate).getTime() + 1000 * 60 * 60 * 35 + minute * 60 * 1000 + second * 1000 + mm);
    			/*防止到星期六的情况,所以重新设置Time*/
    			calendar.setTime(nowDate);
    			printDate(nowDate,calendar);
    			return;
    		}
    		printDate(nowDate,calendar);
    	}
    
    	/**
    	 * 将"yyyy-MM-dd HH:mm:ss格式的date转换为"yyyy-MM-dd的date,时分秒直接去掉不要
    	 *
    	 * @param date
    	 * @return
    	 * @throws ParseException
    	 */
    	public static Date toYearMonthDayDate(Date date) throws ParseException {
    		return simpleDateFormat1.parse(simpleDateFormat2.format(date).split(" ")[0]);
    	}
    
    	/**
    	 * 打印Date
    	 *
    	 * @param date
    	 */
    	private static void printDate(Date date, Calendar calendar) {
    		/*星期六的情况*/
    		if (calendar.get(Calendar.DAY_OF_WEEK) == 7) {
    			/*星期六,加入两天*/
    			date = new Date(date.getTime() + 1000 * 60 * 60 * 24 * 2);
    		}
    		System.out.println("结果:" + simpleDateFormat2.format(date));
    	}
    }
    
    
    
  • 相关阅读:
    Charles抓包工具
    JQuery 实现表单验证,所有验证通过方可提交
    卡巴斯基注册信息清除
    Nginx 404 Not Found 解决办法
    php mysql 多表查询之子查询语句
    搜狗拼音、QQ拼音输入法、2345拼音输入法、百度输入法 、手心输入法对比。(个人体会)
    Notepad++使用-如何导出/导入配置文件
    深蓝词库转换2.4版发布,支持最新的搜狗用户词库备份bin格式
    网站更换服务器,百度站长后台抓取诊断时间
    阿里云代金券领取
  • 原文地址:https://www.cnblogs.com/daihang2366/p/13806003.html
Copyright © 2011-2022 走看看