一、分支结构

1. if-else条件判断

1.1 结构

/*
分支结构中的if-else(条件判断结构)一、三种结构第一种:
if(条件表达式){执行表达式
}第二种:二选一
if(条件表达式){执行表达式1
}else{执行表达式2
}第三种:n选一
if(条件表达式){执行表达式1
}else if(条件表达式){执行表达式2
}else if(条件表达式){执行表达式3
}
...
else{执行表达式n
}*/
class IfTest {public static void main(String[] args) {//举例1int heartBeats = 79;if(heartBeats < 60 || heartBeats > 100){System.out.println("需要做进一步检查");}System.out.println("检查结束");//举例2int age = 23;if(age < 18){System.out.println("你还可以看动画片");}else{System.out.println("你可以看成人电影了");}//举例3if(age < 0){System.out.println("您输入的数据非法");}else if(age < 18){System.out.println("青少年时期");}else if(age < 35){System.out.println("青壮年时期");}else if(age < 60){System.out.println("中年时期");}else if(age < 120){System.out.println("老年时期");}else{System.out.println("你是要成仙啊~~");}}
}

1.2 说明

  1. else 结构是可选的。
  2. 针对于条件表达式:

    如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
    如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
    如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。

  3. if-else结构是可以相互嵌套的。
  4. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。
/*
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断说明:
1. else 结构是可选的。
2. 针对于条件表达式:> 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。> 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。> 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。
*/import java.util.Scanner;
class IfTest {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入岳小鹏期末成绩:(0-100)");int score = scan.nextInt();if(score == 100){System.out.println("奖励一辆BMW");//be my wife!  BMW <---> MSN}else if(score > 80 &&  score <= 99){System.out.println("奖励一台iphone xs max");}else if(score >= 60 && score <= 80){System.out.println("奖励一个 iPad");}else{System.out.println("什么奖励也没有");}}
}
/*
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。说明:
1. if-else结构是可以相互嵌套的。
2. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。
*/
import java.util.Scanner;
class IfTest2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个整数:");int num1 = scanner.nextInt();System.out.println("请输入第二个整数:");int num2 = scanner.nextInt();System.out.println("请输入第三个整数:");int num3 = scanner.nextInt();if(num1 >= num2){if(num3 >= num1)System.out.println(num2 + "," + num1 + "," + num3);else if(num3 <= num2)System.out.println(num3 + "," + num2 + "," + num1);elseSystem.out.println(num2 + "," + num3 + "," + num1);}else{if(num3 >= num2)System.out.println(num1 + "," + num2 + "," + num3);else if(num3 <= num1)System.out.println(num3 + "," + num1 + "," + num2);elseSystem.out.println(num1 + "," + num3 + "," + num2);}}
}
class IfExer {public static void main(String[] args) {int x = 4;int y = 1;if (x > 2) if (y > 2) System.out.println(x + y);//System.out.println("atguigu");else //就近原则System.out.println("x is " + x);//课后练习3:测算狗的年龄int dogAge = 6;if(dogAge >= 0 && dogAge <= 2){System.out.println("相当于人的年龄:" + dogAge * 10.5);}else if( dogAge > 2){System.out.println("相当于人的年龄:" + (2 * 10.5 + (dogAge - 2) * 4));}else{System.out.println("狗狗还没出生呢!");}//课后练习4:如何获取一个随机数:10 - 99int value = (int)(Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --->[10.0, 100.0) -->[10,99]System.out.println(value);//公式:[a,b]  :  (int)(Math.random() * (b - a + 1) )+ a}
}
/*
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”*/import java.util.Scanner;class IfExer1 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入你的身高:(cm)");int height = scan.nextInt();System.out.println("请输入你的财富:(千万)");double wealth = scan.nextDouble();/*方式一:System.out.println("请输入你是否帅:(true/false)");boolean isHandsome = scan.nextBoolean();if(height >= 180 && wealth >= 1 && isHandsome){System.out.println("我一定要嫁给他!!!");}else if(height >= 180 || wealth >= 1 || isHandsome){System.out.println("嫁吧,比上不足,比下有余。");}else{System.out.println("不嫁!");}*///方式二:System.out.println("请输入你是否帅:(是/否)");String isHandsome = scan.next();if(height >= 180 && wealth >= 1 && isHandsome.equals("是")){System.out.println("我一定要嫁给他!!!");}else if(height >= 180 || wealth >= 1 || isHandsome.equals("是")){System.out.println("嫁吧,比上不足,比下有余。");}else{System.out.println("不嫁!");}}
}

2. switch-case选择

2.1 结构

/*
分支结构之二:switch-case1.格式
switch(表达式){
case 常量1:执行语句1;//break;case 常量2:执行语句2;//break;...default:执行语句n;//break;
}2.说明:
① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构③ switch结构中的表达式,只能是如下的6种数据类型之一:byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)④ case 之后只能声明常量。不能声明范围。⑤ break关键字是可选的。⑥ default:相当于if-else结构中的else.  default结构是可选的,而且位置是灵活的。
*/class SwitchCaseTest {public static void main(String[] args) {int number = 5;switch(number){case 0:System.out.println("zero");break;case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("other");//break;}String season = "summer";switch (season) {case "spring":System.out.println("春暖花开");break;case "summer":System.out.println("夏日炎炎");break;case "autumn":System.out.println("秋高气爽");break;case "winter":System.out.println("冬雪皑皑");break;default:System.out.println("季节输入有误");break;}//**************如下的两种情况都编译不通过*********************//情况一/*boolean isHandsome = true;switch(isHandsome){case true:System.out.println("我好帅啊~~~");break;case false:System.out.println("我好丑啊~~~");break;default:System.out.println("输入有误~~~");}*///情况二/*int age = 10;switch(age){case age > 18:System.out.println("成年了");break;default:System.out.println("未成年");}*/}
}

2.2 说明

  1. 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。
    当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构
    末尾结束为止。
  2. break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
  3. switch结构中的表达式,只能是如下的6种数据类型之一:
    byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
  4. case 之后只能声明常量。不能声明范围。
  5. break关键字是可选的。
  6. default:相当于if-else结构中的else。
    default结构是可选的,而且位置是灵活的。
  7. 如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
  8. break在switch-case中是可选的。
/*
例题:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
*/
class SwitchCaseTest1 {public static void main(String[] args) {/*int score = 78;switch(score){case 0:case 1:case 2:...case 100:}*//*int score = 78;if(score >= 60){}else{}*/int score = 78;switch(score / 10){case 0:case 1:case 2:case 3:case 4:case 5:System.out.println("不及格");break;case 6:case 7:case 8:case 9:case 10:System.out.println("及格");break;}//更优的解决方案:switch(score / 60){case 0:System.out.println("不及格");break;case 1:System.out.println("及格");break;}}
}
/*
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。2  15:  31 + 155  7: 31 + 28 + 31 + 30 + 7 ....说明:break在switch-case中是可选的
*/
import java.util.Scanner;
class SwitchCaseTest2 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入2019年的month:");int month = scan.nextInt();System.out.println("请输入2019年的day:");int day = scan.nextInt();//定义一个变量来保存总天数int sumDays = 0;//方式一:冗余/*if(month == 1){sumDays = day;}else if(month == 2){sumDays = 31 + day;}else if(month == 3){sumDays = 31 + 28 + day;}else if(month == 4){sumDays = 31 + 28 + 31 + day;}//...else{//month == 12//sumDays = ..... + day;}*///方式二:冗余/*switch(month){case 1:sumDays = day;break;case 2:sumDays = 31 + day;break;case 3:sumDays = 31 + 28 + day;break;...}*/switch(month){case 12:sumDays += 30;case 11:sumDays += 31;case 10:sumDays += 30;case 9:sumDays += 31;case 8:sumDays += 31;case 7:sumDays += 30;case 6:sumDays += 31;case 5:sumDays += 30;case 4:sumDays += 31;case 3:sumDays += 28;case 2:sumDays += 31;case 1:sumDays += day;}System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");}
}
/*
从键盘分别输入年、月、日,判断这一天是当年的第几天注:判断一年是否是闰年的标准:1)可以被4整除,但不可被100整除或2)可以被400整除说明:
1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。*/
import java.util.Scanner;
class SwitchCaseExer {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入year:");int year = scan.nextInt();System.out.println("请输入month:");int month = scan.nextInt();System.out.println("请输入day:");int day = scan.nextInt();//定义一个变量来保存总天数int sumDays = 0;switch(month){case 12:sumDays += 30;case 11:sumDays += 31;case 10:sumDays += 30;case 9:sumDays += 31;case 8:sumDays += 31;case 7:sumDays += 30;case 6:sumDays += 31;case 5:sumDays += 30;case 4:sumDays += 31;case 3://sumDays += 28;//判断year是否是闰年if((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0){sumDays += 29;}else{sumDays += 28;}case 2:sumDays += 31;case 1:sumDays += day;}System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");}
}

二、循环结构

1. 循环结构的四要素

① 初始化条件
② 循环条件 —>是boolean类型
③ 循环体
④ 迭代条件
说明:通常情况下,循环结束都是因为②中循环条件返回false了。

2. 三种循环结构

2.1 for循环

/*
For循环结构的使用
一、循环结构的4个要素
① 初始化条件
② 循环条件  --->是boolean类型
③ 循环体
④ 迭代条件二、for循环的结构for(①;②;④){③
}执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②*/
class ForTest {public static void main(String[] args) {/*System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");*/for(int i = 1;i <= 5;i++){//i:1,2,3,4,5System.out.println("Hello World!");}//i:在for循环内有效。出了for循环就失效了。//System.out.println(i);//练习:int num = 1;for(System.out.print('a');num <= 3;System.out.print('c'),num++){System.out.print('b');}//输出结果:abcbcbcSystem.out.println();//例题:遍历100以内的偶数,输出所有偶数的和,输出偶数的个数int sum = 0;//记录所有偶数的和int count = 0;//记录偶数的个数for(int i = 1;i <= 100;i++){if(i % 2 == 0){System.out.println(i);sum += i;count++;}//System.out.println("总和为:" + sum);}System.out.println("总和为:" + sum);System.out.println("个数为:" + count);}
}
/*
编写程序从1循环到150,并在每行打印一个值,
另外在每个3的倍数行上打印出“foo”,
在每个5的倍数行上打印“biz”,
在每个7的倍数行上打印输出“baz”。*/class ForTest1 {public static void main(String[] args) {for(int i = 1;i <= 150;i++){System.out.print(i + "  ");if(i % 3 == 0){System.out.print("foo ");}if(i % 5 == 0){System.out.print("biz ");}if(i % 7 == 0){System.out.print("baz ");}//换行System.out.println();}}
}
/*
编写程序从1循环到150,并在每行打印一个值,
另外在每个3的倍数行上打印出“foo”,
在每个5的倍数行上打印“biz”,
在每个7的倍数行上打印输出“baz”。
*/class ForTest1 {public static void main(String[] args) {for(int i = 1;i <= 150;i++){System.out.print(i + "  ");if(i % 3 == 0){System.out.print("foo ");}if(i % 5 == 0){System.out.print("biz ");}if(i % 7 == 0){System.out.print("baz ");}//换行System.out.println();}}
}
/*
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。说明:break关键字的使用:一旦在循环中执行到break,就跳出循环*/import java.util.Scanner;
class ForTest{public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("请输入第一个正整数:");int m = scan.nextInt();System.out.println("请输入第二个正整数:");int n = scan.nextInt();//获取最大公约数//1.获取两个数中的较小值int min = (m <= n)? m : n;//2.遍历for(int i = min;i >= 1 ;i--){if(m % i == 0 && n % i == 0){System.out.println("最大公约数为:" + i);break;//一旦在循环中执行到break,就跳出循环}}//获取最小公倍数//1.获取两个数中的较大值int max = (m >= n)? m : n;//2.遍历for(int i = max;i <= m * n;i++){if(i % m == 0 && i % n == 0){System.out.println("最小公倍数:" + i);break;}}     }
}

2.2 while循环

/*
While 循环的使用一、循环结构的4个要素
① 初始化条件
② 循环条件  --->是boolean类型
③ 循环体
④ 迭代条件二、while循环的结构①
while(②){③;④;
}执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②说明:
1.写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!
2.我们写程序,要避免出现死循环。
3.for循环和while循环是可以相互转换的! 区别:for循环和while循环的初始化条件部分的作用范围不同。算法:有限性。*/
class  WhileTest{public static void main(String[] args) {//遍历100以内的所有偶数int i = 1;while(i <= 100){if(i % 2 == 0){System.out.println(i);}i++;}//出了while循环以后,仍可以调用。System.out.println(i);//101}
}

2.3 do-while循环

/*
do-while循环的使用一、循环结构的4个要素
① 初始化条件
② 循环条件  --->是boolean类型
③ 循环体
④ 迭代条件二、do-while循环结构:①
do{③;④;}while(②);执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②说明:
1.do-while循环至少会执行一次循环体!
2.开发中,使用for和while更多一些。较少使用do-while*/
class DoWhileTest {public static void main(String[] args) {//遍历100以内的偶数,并计算所有偶数的和及偶数的个数int num = 1;int sum = 0;//记录总和int count = 0;//记录个数do{if(num % 2 == 0){System.out.println(num);sum += num;count++;}num++;}while(num <= 100);System.out.println("总和为:" + sum);System.out.println("个数为:" + count);//*************体会do-while至少执行一次循环体***************int number1 = 10;while(number1 > 10){System.out.println("hello:while");number1--;}int number2 = 10;do{System.out.println("hello:do-while");number2--;}while(number2 > 10);}
}

2.4 while(true)循环

/*
题目:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。说明:
1. 不在循环条件部分限制次数的结构:for(;;) 或 while(true)
2. 结束循环有几种方式?方式一:循环条件部分返回false方式二:在循环体中,执行break
*/import java.util.Scanner;class ForWhileTest {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int positiveNumber = 0;//记录正数的个数int negativeNumber = 0;//记录负数的个数for(;;){//while(true){int number = scan.nextInt();//判断number的正负情况if(number > 0){positiveNumber++;}else if(number < 0){negativeNumber++;}else{//一旦执行break,跳出循环break;}}System.out.println("输入的正数个数为:" + positiveNumber);System.out.println("输入的负数个数为:" + negativeNumber);}
}

3. 嵌套循环

三、补充:Scanner类的使用

/*
如何从键盘获取不同类型的变量:需要使用Scanner类具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException
导致程序终止。
*/
//1.导包:import java.util.Scanner;
import java.util.Scanner;class ScannerTest{public static void main(String[] args){//2.Scanner的实例化Scanner scan = new Scanner(System.in);//3.调用Scanner类的相关方法System.out.println("请输入你的姓名:");String name = scan.next();System.out.println(name);System.out.println("请输入你的芳龄:");int age = scan.nextInt();System.out.println(age);System.out.println("请输入你的体重:");double weight = scan.nextDouble();System.out.println(weight);System.out.println("你是否相中我了呢?(true/false)");boolean isLove = scan.nextBoolean();System.out.println(isLove);//对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串System.out.println("请输入你的性别:(男/女)");String gender = scan.next();//"男"char genderChar = gender.charAt(0);//获取索引为0位置上的字符System.out.println(genderChar);}}

学习使用IntelliJ IDEA的第四天:Java基本语法——流程控制相关推荐

  1. 学习使用IntelliJ IDEA的第八天:Java基本语法——面向对象(下)

    一.关键字:static 1. static:静态的 2. static可以用来修饰:属性.方法.代码块.内部类3. 使用static修饰属性:静态变量(或类变量)3.1 属性,按是否使用static ...

  2. Polyworks脚本开发学习笔记(六)-比较运算、数学运算、逻辑运算及流程控制

    Polyworks脚本开发学习笔记(六)-比较运算.数学运算.逻辑运算及流程控制 前言 比较运算.逻辑运算及流程控制是编程的基本语法,Polyworks的语法规则与VB/C#/Python等并没有很大 ...

  3. 【博学谷学习记录】超强总结,用心分享|Java基础语法

    java基础语法 1.什么是Java? 答:Java语言是美国Sun公司(Stanford University Network)在1995年推出的计算机语言,语言是人与人交流沟通的表达方式 ,那么计 ...

  4. Java学习笔记(三):流程控制

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://mp.csdn.net/mdeditor/100662793 目录 ...

  5. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天--JAVA基础回顾 这才学习Android的 ...

  6. 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

    原文:http://www.techweb.com.cn/news/2017-07-31/2566452.shtml 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目 2017. ...

  7. 软件调试学习笔记(四)—— 异常的处理流程

    软件调试学习笔记(四)-- 异常的处理流程 要点回顾 异常的处理流程 实验1:理解调试器与异常的关系 未处理异常:最后一道防线 实验2:理解UnhandledExceptionFilter执行流程 实 ...

  8. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  9. 从零开始学习音视频编程技术(四) FFMPEG的使用

    零开始学习音视频编程技术(四) FFMPEG的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=7 音视频开发中最常做的就是编解码的操作了,以H ...

最新文章

  1. 阿里员工吐槽:杭州22k拿到头条35k和shopee33k的offer,怎么选?
  2. Jmeter 命令行选项目录
  3. netty系列之:channelHandlerContext详解
  4. visual foxpro 程序员指南_如何平衡工作和生活的关系?程序员归来依旧是少年的好方法...
  5. 哑编码官方代码自己的注解
  6. 《Java程序设计》第2周学习总结
  7. 模板:k短路(可并堆)
  8. 如何在JMeter中执行客户端Web性能测试?
  9. yum配置中driver-class-name: com.mysql.jdbc.Driver报错
  10. 【转】DELPHI 对DICOM中的窗宽、窗位调整
  11. Caffe之DataTransformer
  12. SpringBoot开源项目(企业信息化基础平台)
  13. ORA-07445 ERROR on auto execute of job 8913
  14. mysql删完数据表空间没释放_mysql删除表后,空间一直不释放
  15. 蓝桥杯试题java_java蓝桥杯试题
  16. 计算机考专硕还是学硕好呢,2021计算机考研选学硕还是专硕?
  17. 光猫接交换机,交换机下接无线路由器,电脑网线连接交换机进不去无线路由器后台是为什么?
  18. 淘宝/京东/苏宁/拼多多/唯品会 返利消息批量转链思路
  19. PostgreSQL的全文检索(一)
  20. keil编译错误:Error:Flash DownLoad failed - “Cortex-M4“

热门文章

  1. 手头紧!贷款还不上该怎么办?影响征信吗?
  2. 检测-纹理表面凸起、凹痕、划痕缺陷的检测
  3. 行业报告丨引领产业数字化转型,数字化场景革命十大洞察(附下载)
  4. 如何实现chatgpt的打字机效果
  5. 7-28 猴子选大王 (20 分)
  6. Integercache问题
  7. 这是个啥错误,怎么解决啊
  8. Unity听不见声音的问题
  9. 5. 如何描述一个bug / 如何定义bug的类型级别 / bug的生命周期
  10. 新手如何画出自定义View(Android——自定义折线图)