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]);
}
/* * 总结: * 以后对于此种等间隔或者可以转化为等间隔的事物,均可以采用类似思路去做。 * 用存储的空间,来换执行算法的运行时间。 */
}
还没有评论,来说两句吧...