数组和集合容器的实战,性能分析

案例: 输入儿童性别,年龄(0~18),身高,输出身高测试结果

请添加图片描述
请添加图片描述

二维数组方式

/**
 * @author Hua
 * @create 2022-10-07 10:19
 * 输入儿童性别,年龄(0~18),身高,输出身高测试结果

 */
@Slf4j
public class branchTest {

    public static void main(String[] args) {
//        测试数据,只有1,2岁...
        String[][] TableMale = new String[][]{{"1", "71.2", "73.8", "76.5", "79.3"}, {"2", "81.6", "85.1", "88.5", "92.1"}};
        String[][] TableFemale = new String[][]{{"1", "69.7", "72.3", "75.0", "77.7"}, {"2", "80.5", "83.8", "87.2", "90.7"}};
        Scanner input = new Scanner(System.in);
        log.debug("请输入性别");
        String gender = input.nextLine();
        log.debug("请输入年龄");
        int age = input.nextInt();
        log.debug("请输入身高");
        Double height = input.nextDouble();
        if ("男".equals(gender)) {
            for (int i = 0; i < TableMale.length; i++) {
                String[] lines = TableMale[i];
                GetGrade(age, height, lines);
            }
        } else if ("女".equals(gender)) {
            for (int i = 0; i < TableFemale.length; i++) {
                String[] lines = TableFemale[i];
                GetGrade(age, height, lines);

            }
        }

    }

    public static void GetGrade(int age, Double height, String[] lines) {
        if (age == Double.valueOf(lines[0])) {
            if (0 < height && height < Double.valueOf(lines[1])) {
                log.debug("矮小");
            } else if (Double.valueOf(lines[1]) < height && height < Double.valueOf(lines[2])) {
                log.debug("偏矮");
            } else if (Double.valueOf(lines[2]) < height && height < Double.valueOf(lines[3])) {
                log.debug("标准");
            } else if (Double.valueOf(lines[3]) < height) {
                log.debug("超高");
            }
        }
    }

}

小结分析

  • 需要改善的地方: 数据合法性校验, 效率性能问题没有考虑,采用数组的话,需要全部索引一遍才能找到数据,而使用map容器的话,就可以直接提取,
  • 该方法难点是存入map容器的数据需要提前设计好,后期用到的所有数据都直接从容器获取,还有一点是获取数据的时候需要切割,需要熟练掌握常用的MapAPI

HashMap方式

public class Height {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入儿童性别,年龄,身高  (如:男,13,167.8),exit退出:"); // 输入儿童的信息
		String info = scanner.nextLine();
		int age;
		String sex;
		float height = 0.0f;
		String[] strinfo = null;
		while (!info.equalsIgnoreCase("exit")) {
			strinfo = info.split(",");
			if (info == null || strinfo.length != 3) {
				System.out.println("输入信息错误,请按照指定格式给定!\n请输入儿童性别,年龄,身高  (如:男,13,167.8),exit退出:");
				info = scanner.nextLine();
			} else {
				if (!isInteger(strinfo[1]) || !isFloat(strinfo[2]) ) {
					System.out.println("输入信息错误,年龄和身高请输入数值类型的数据!\n请输入儿童性别,年龄,身高  (如:男,13,167.8),exit退出:");
					info = scanner.nextLine();
				} else {
					age = Integer.parseInt(strinfo[1]);
					height = Float.parseFloat(strinfo[2]);
					sex = strinfo[0].trim();

					if(!(0<age && age<200 )|| !(0<height && height<200)){
						System.out.println("输入信息错误,年龄和身高请输入合法范围数据!\n请输入儿童性别,年龄,身高  (如:男,13,167.8),exit退出:");
						info = scanner.nextLine();
					}else {
						if (sex.equals("男") || sex.equals("女")) {
							System.out.println("评测结果:"+getGrade(sex+"-"+age,height));
							System.out.println("请输入儿童性别,年龄,身高  (如:男,13,167.8),exit退出:");
							info = scanner.nextLine();
						} else {
							System.out.println("输入信息错误,性别只能是男或者是女!\n请输入儿童性别,年龄,身高  (如:男,13,167.8),exit退出:");
							info = scanner.nextLine();
						}
					}

				}

			}
		}
		System.out.println("程序已退出,感谢使用!");
	}

	// 判定字符串是否为整数
	public static boolean isInteger(String s) {
		try {
			Integer.parseInt(s);
			return true;
		} catch (Exception ex) {
			return false;
		}
	}

	// 判定字符串是否为浮点数
	public static boolean isFloat(String s) {
		try {
			Float.parseFloat(s);
			return true;
		} catch (Exception ex) {
			return false;
		}
	}

	public static boolean isContain(String start, String end, float height) {

		if (start == "0.0") {
			if (height < Float.parseFloat(end)) {
				return true;
			} else {
				return false;
			}

		} else if (end == "0.0") {
			if (height >= Float.parseFloat(start)) {
				return true;
			} else {
				return false;
			}
		} else {
			if (height >= Float.parseFloat(start) && height < Float.parseFloat(end)) {
				return true;
			} else {
				return false;
			}
		}
	}

	public static String getGrade(String key,float height) {
		Map info = new HashMap<String, String>();
		String hinfo[]=null;
		String fdinfo[]=null;
		String result ="";
		//男孩信息录入
		info.put("男-1", "0.0-73.8:矮小;73.8-76.5:偏矮;76.5-79.3:标准;79.3-0.0:超高");
		info.put("男-2", "0.0-85.1:矮小;85.1-88.5:偏矮;88.5-92.1:标准;92.1-0.0:超高");
		info.put("男-3", "0.0-93.0:矮小;93.0-96.8:偏矮;96.8-100.7:标准;100.7-0.0:超高");
		//女孩信息录入
		info.put("女-3", "0.0-91.8:矮小;91.8-95.6:偏矮;95.6-99.4:标准;99.4-0.0:超高");

		if(info.containsKey(key)) {
			hinfo = info.get(key).toString().split(";");
			for(String str:hinfo) {
				fdinfo = str.split(":")[0].split("-");
				result =str.split(":")[1];
				if(isContain(fdinfo[0],fdinfo[1],height)) {
					break;
				}
			}
			return result;
		}else {
			return "儿童年龄需要在1~18岁之间";
		}
	}
}

小结分析
使用HashMap之后,提高了数据的查询速度,节省了CPU资源.
代码也增加了数据有效性验证,强化了代码的健壮性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华哥啊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值