0416/0417分支和循环结构
基本程序结构可分为 顺序结构 分支结构 循环结构
1.分支结构
【建议】写分支循环结构时可先写好程序框架
1.1if语句
三种循环结构
if(布尔结论){...}
if(布尔结论){...}else{...}
if(布尔结论){...}else if{...}[else{...}]
//小技巧TIP,了解即可
【注意】如果 if(或 else if,或 else) 条件成立时的执行语句只有一条,是可以省略大括号的!但如果执行语句有多条,那么大括号就是不可或缺的。
int days = 31;
if(days > 30)
System.out.println("本月是大月");
else
System.out.println("本月是小月");
1.2switch语句
switch(int char 枚举类型 String){
case:1
//语句体
break;
case:2
//语句体
break;
default:
//语句体
}
【注意点】
switch 只能根据以上类型具体数值进行判断,if 能对布尔表达式进行判断再选择,if可操作范围型的数据
break 关键字用于结束switch语句段
switch 后的条件会与case后的判断的内容会区分大小写
JDK1.5 支持枚举类型
JDK1.7 支持String类型
switch 语句支持向下穿透,本case无break语句会继续向下执行,直到遇到break或者(switch case)的大括号}
default 可以省略,代码编译没有语法错误,但失去了一个异常情况处理方式》》AJCG阿里巴巴Java开发规范中,是不推荐省略default
在switch - case结构中,不允许出现相同的case选项,代码无法进行操作选择,因为所有case选择是平级的
1.3分支结构总结
分支结构用于处理代码中出现的一些需要判断,并且按按条件处理的情况!!!
1. 条件约束考虑清楚
2. 处理的过程考虑清楚
3. 数据类型选择
2.循环结构
2.1while/for循环结构
while语句适用于知道判断条件结果的
for语句适用于知道循环次数的
三种循环语句都是:条件满足一直循环,循环到条件不满足时停止
代码中一定存在需要循环出现的情况,如果不使用循环,会导致以下一些问题
1. 阅读性极差!!!
2. 维护性极差!!!
3. 代码冗余!!!
2.2while循环
while (/* 循环条件 true or false */) {
// 循环体
// (循环条件变更)
}
/*
执行流程:
当前程序运行到while循环结构时,首先判断while之后的小括号里面的循环条件是否为true,如果为true,执行循环体,在回到循环条件判断,直到循环条件为false,终止循环!!!
*/
2.3do-while循环
do {
// 循环体
// (循环条件变更)
} while (/* 循环条件判断 */);
/*
执行流程:
当程序执行到do - while循环结构时,首先执行一次循环体(循环条件变更),再来判断while中循环条件判断是否为true,如果为true,继续执行,如果为false,终止循环。
【注意】
1. while(condition);;;;;;;;;;;;;;;;;;;;;;;;;;; 这里英文分号
2. 执行do - while需要明确第一次循环会不会存在隐患
【注意】
do {
ch += 1;//正确操作,建议操作
//ch ++;//正确操作
//ch = ch +1; //错误操作 char为字符类型,无法保存int类型!!!
} while (ch <= 'Z');
*/
2.4循环总结
1. 循环过程中最核心的内容就是循环变量,需要对于循环变量的执行的过程中数值变量完全掌握!!!如果无法明确循环的次数,循环变量的值,循环的过程,可以将循环代码中变量的变更过程记录。
2. 循环过程中需要注意无限循环问题,控制无限循环问题的出现。一定要保证循环条件有效性或者代码中存在一个跳出循环的机制。
3. do while循环中,第一次循环体的执行是没有经过任何的条件判断的,需要注意!
【已知,可控】程序最好达到
4. while和do while循环结构是可以进行互换的。
5. 然后在while和do while之间考虑使用的情况下,一般推荐使用while循环。但是不代表do while没有实际的使用效果。
2.5循环控制语句
continue 跳出本次循环继续下一次循环
break 终止此循环
2.6案例
/*案例1
*
* *
* * *
* * * *
* * * * *
*/
class Stars{
public static void main(String[] args){
int n = 5;
for ( int i = 1;i<= n;i++){
for (int j = 1;j<= n - i;j++){
System.out.print(" ");
}
for (int k = 1;k <=i;k++){
System.out.print("* ");
}
System.out.println("");
}
}
}
/*案例2
乘法口诀表
*/
class Cheng{
public static void main(String[] args) {
for( int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(i + "*" + j + "=" + (i*j) + " ");
}
System.out.println();
}
}
}
3.补充知识点
3.1Scanner
Scanner是Java中提供的用于从控制台输入数据到代码中的一种方式,存在一些弊端,容易导致一些错误,这里只要求大家了解一些必要的方法。
【Scanner操作哪里需要沾哪里】
Scanner使用流程
1. 点技能点,Java程序本身是没有直接使用Scanner的能力,这里需要点技能点。
官网操作【导包】
固定格式:
import java.util.Scanner;
放在class代码上一行
2. 需要得到一个Scanner的变量
固定格式:
Scanner sc = new Scanner(System.in);
3. 选择执行对应的方法,从键盘上获取对应的数据
获取int类型
int类型的变量 = sc.nextInt();
获取float类型
float类型的变量 = sc.nextFloat();
获取double类型
double类型的变量 = sc.nextDouble();
获取char类型
char类型的变量 = sc.nextLine().charAt(0);
3.2用户友好性提示
代码运行需要站着用户的角度来思考问题。用户进行操作时,需要给予用户足够的提示和引导,告知用户当前操作如何完成,考虑代码的友好性!!!
用户粘性问题!!!用户提示!!!用户友好性!!!
3.3 用户输入数据合法性判断
就算在提示中告知用户需要输入的数据范围是多少,但是用户在实际使用的过程中,依然存在输入错误的情况。需要对于用户输入的数据进行合法性判断,如果用户输入的内容符合我们的判断逻辑需求,进入数据处理过程。如果不符合要求,直接终止程序!!!
3.4综合案例
/*
学生成绩的等级划分:
90 ~ 100 秀儿
80 ~ 90 良儿
70 ~ 80 中儿
60 ~ 70 格儿
60 以下 让你爹穿着拖鞋来学校一趟
*/
// 导包,让当前Java代码可以使用Scanner
import java.util.Scanner;
class Demo10 {
public static void main(String[] args) {
/*
成绩考虑存在0.5的情况,需要使用浮点类型数据
这里采用float类型,这里赋值一个初值
*/
float score = 0.0F;
// 需要得到一个Scanner的变量
Scanner sc = new Scanner(System.in);
/* 提示用户操作 */
System.out.println("请输入学生的成绩1 ~ 100:");
score = sc.nextFloat();
/*
验证用户输入数据的合法性
如果用户输入的数据不合法,终止程序!!!
不合法: 输入数据 > 100 或者 < 0
*/
if (score > 100 || score < 0) {
System.out.println("输入数据不合法!!!");
// 程序退出
System.exit(0);
}
/* 成绩等级判断 */
if (score >= 90 && score <= 100) {
System.out.println("秀儿");
} else if (score >= 80) {
System.out.println("良儿");
} else if (score >= 70) {
System.out.println("中儿");
} else if (score >= 60) {
System.out.println("格儿");
} else {
System.out.println("让你爹穿着拖鞋来学校一趟");
}
}
}
System.exit(0); 程序退出语句