Java数据结构与算法之年龄判断

一道题,很巧妙。废话不多说,直接上源码。

/*
 *  需求:一个网站有一个功能,当你填入你的年龄的时候,我就能自动判断你是哪个年龄段 
 *  那么我们就写这样一个功能:键盘输入年龄,请打印出是哪个年龄段
 *  0-9岁,儿童
 *  10-19岁,少年
 *  20-29岁,青年
 *  30-39岁,壮年
 *  40-49岁,中年
 *  50-59岁,中老年
 *  60岁以上,老年
 *  尽量优化您的代码
 */

/*
 * 分析:
 * 此题看似简单,刚接触if--else结构就可以写出相对应的代码。
 * 但关键在于结尾的"优化"二字。
 */
package com.wayne.example;

import java.util.Scanner;

public class JudgeAge {
    public static void main(String[] args) {
        String[] strAge = { "儿童", "少年", "青年", "壮年", "中年", "中老年", "老年" };

        System.out.println("请输入你的年龄:");
        Scanner sc = new Scanner(System.in);
        int age = sc.nextInt();

//      最传统的做法如下:
//      if(age >=0 && age <= 9){
//          System.out.println("儿童");
//      }else if(age >= 10 && age <= 19){
//          System.out.println("少年");
//      }else   if(age >= 20 && age <= 29){
//          System.out.println("青年");
//      }else   if(age >= 30 && age <= 39){
//          System.out.println("壮年");
//      }else if(age >= 40 && age <= 49){
//          System.out.println("中年");
//      }else if(age >= 50 && age <= 59){
//          System.out.println("中老年");
//      }else{
//          System.out.println("老年");
//      }
//      但此法的每次都会拿age去和判断值去比较,比较耗费时间

//      稍微进阶的一些写法
//      if(age>=60)
//          System.out.println("老年");
//      else if(age>=50)
//          System.out.println("中老年");
//      else if(age>=40)
//          System.out.println("中年");
//      else if(age>=30)
//          System.out.println("壮年");
//      else if(age>=20)
//          System.out.println("青年");
//      else if(age>=10)
//          System.out.println("少年");
//      else
//          System.out.println("儿童");
//      此法相比之前的方法,比较次数会减少一些,但是如果是儿童的话,还是需要全部比较之后才能得出结论。

//      继续优化
//      分析:
//      通过分析条件,发现其分布区间是一个等间隔的区间,
//      故可以在每一个区间内任意一个数,除以区间间隔,会得到如下的数字
//          0      1      2     3      4      5      6
//      此可以认为是数组的角标
//      { "儿童", "少年", "青年", "壮年", "中年", "中老年", "老年" };
//      故通过查表的方式获得对应的值。
//      具体实现如下:
        int indexStrAge = age / 10;

        if (indexStrAge > 6)
            indexStrAge = 6;

        System.out.println("您是一个" + strAge[indexStrAge]);
    }

/*
 * 总结:
 * 以后对于此种等间隔或者可以转化为等间隔的事物,均可以采用类似思路去做。
 * 用存储的空间,来换执行算法的运行时间。
 */
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值