03-条件循环
03-Java基本语法_条件
回顾
- java标识符,关键字
- 标识符是赋予类、方法、变量等的名字
- 关键字:eclipse以紫红色加粗字体出现, 具有专门意义和用途的标识符,也称保留关键字
- 命名规则
- Java数据类型
- 八大基本数据类型 + 复合数据类型(引用数据类型)
- 运算符和表达式
- 赋值运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 运算符的优先级
目录
- 条件语句
- 循环语句
- Return、break、continue 关键字的区别
选择语句(分支语句)
在我们生活中还有很多情况都需要面临选择的问题。所以程序为了解决生活中的问题,也应该有一个可以描述选择的语句。
//比如放假回家我们要选择什么交通方式回家
public class Demo00 {
public static void main(String[] args) {
int money = 100;
System.out.println("小明五一放假要回福州老家,兜里只有"+money+"元\n");
//小明应该选择什么交通方式回家?
//动车票90元 自驾230元 飞机票。。
if (money-90 >= 0 && money -230 < 0) {
System.out.println("小明花90块钱买了一张去福州的动车票,钱还剩下"+(money-90)+"元");
} else {
System.out.println("小明花230块钱打滴滴直接回到福州的家门口,钱还剩下"+(money -230)+"元");
}
}
}
一、if 条件语句
- 语法结构(4种)
- 单分支、双分支、多重分支、嵌套的if
单分支if语句
语法格式:if (条件表达式1) { 代码块1 }
- 条件表达式:关系运算符 + 逻辑运算符;==>boolean
- if语句中当表达式1为true执行代码块1;
- 由{ }包裹的称代码块或复合语句;
//实现判断一个数是否是偶数,是输出,否则不进行任何操作
int num = 11;
if (num%2 == 0) {
system.out.println(num);
}
- 注意:
赋值运算符= 和 关系运算符 == 要注意使用。
双分支
if...else
语法:if (表达式1)
{
代码块1
} else {
代码块2
}
其中,当表达式1为true执行代码块1,为false执行else。
if (num%2 == 0) {
system.out.println(num+"是偶数");
} else {
system.out.println(num+"是奇数");
}
//注意点,如果条件体只有一条语句,则可以不用花括号。
多重分支 if...else if ...
语法:if (表达式1) {
代码块1
} if (表达2) {
代码块2
} else if (表达3) {
代码块3
} else {
代码块4
}
其中,else if 可以多个,但是else只能有一个。
案例3:实现对学生的成绩进行登记判定。
要求:score<=60分则D 、(60,75] 则C、(75,85]则B 、(85,100]A
//问题:成绩随机,怎么获取?==>想从键盘获取用户输入信息? 用什么方法?
//完成模块需要注意的是:1.功能按需完成,2注重UI\UE,即注重用户体验感。3.效率
// 通过在项目开发中考虑复用性问题,如何利用循环方式实现多次录入成绩并判定等级。
//利用键盘输入流 获取键盘信息
//Scanner sc = new Scanner(System.in);//运行这个类的时候,Java中的JDK已经提供封装好的功能,只需要去调用它。
//接受用户输入信息。
//这行表示:将键盘输入的数字保存到score变量中去。
//int score = sc.nextInt();
/******************************/
system.out.println("请从键盘输出0~100之间的数字,并回车结束。");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score<=60) { system.out.println("D"); } else if (score<=75) { system.out.println("C"); } else if (score<=85) { system.out.println("B"); } else { system.out.println("A"); }
嵌套if分支
嵌套的if语句
语法:if(表达式1){
if (表达式2){
代码块2
}
代码块1
} else {...}
- 注意:
if语句中,else与同一代码块中最近的且没有else的if匹配。
其实就是 遵照 就近原则,else一般与最近的if相匹配。
//[0,60],(60,75],(75,85],(85,100]
System.out.println("嵌套if语句:请用键盘输入学生成绩,并以回车键结束输入。");
score = sc.nextInt();
if (score > 60) {
if (score > 75) {
if (score > 85)
System.out.println("学生成绩:"+score+",等级为A");
else
System.out.println("学生成绩:"+score+",等级为B");
} else {
System.out.println("学生成绩:"+score+",等级为C");
}
} else {
System.out.println("学生成绩:"+score+",等级为D");
}
/*
* 闰年判断的两种实现:使用 嵌套if语句 和 双分支if
* 规律:年份是4的倍数但是不是100的倍数,或者是400的倍数。
1.year%4 == 0 但是不是 year%100 != 0
2.year%400 ==0
*/
//嵌套if
System.out.println("请输入年份,以回车结束。");
Scanner sc1 = new Scanner(System.in);
int year =sc.nextInt();
if (year%4 == 0) { //2000
if (year%100 != 0) {
System.out.println(year+"年是闰年。");
} else if (year % 400 == 0) {
System.out.println(year+"年是闰年。");
} else {
System.out.println(year+"年是平年。");
}
}
//双分支if
if ((year%4 == 0 && year%100 != 0) || year%400 == 0) {
System.out.println(year+"年是闰年。");
} else {
System.out.println(year+"年是平年。");
}
二、三目运算符
条件运算符是java中唯一的三目运算符。
语法:表达式1 ? 表达式2 : 表达式3
其中,表达式1的计算结果为true,则取表达式2的计算结果作为整个条件表达式的值;如果表达式1为false,则取表达式3的计算结果作为整个式子的值。
Scanner sc = new Scanner(System.in);
System.out.println("请输入a值");
int a = sc.nextInt();
System.out.println("请输入b值");
int b = sc.nextInt();
System.out.print("a=" + a + ",b=" + b + "判断它们的最大值是:");
int max = a > b ? a : b;
System.out.println(max);
System.out.println("=====比较用户输入的三个数的大小====");
System.out.println("请输入c值");
int c = sc.nextInt();
// 方法1
max = max > c ? max : c;
System.out.println("比较a=" + a + ",b=" + b + ",c=" + c + "的值,最大的是:" + max);
// 方法2
max = a > b ? (a > c ? a : c) : (b > c ? b : c);
System.out.println("比较a=" + a + ",b=" + b + ",c=" + c + "的值,最大的是:" + max);
三、switch语句
switch语句是一种多路判定语句,它只判断表达式的值,是否与整数或字符常量列表中的某个值相匹配。
switch(表达式) { //不是条件语句
case 常量1:
代码块1;
break;
case 常量2:
代码块2;
break
....
default:
代码块;
break;
}
```java //移动10086自助语音服务,输入0~3,选择的业务 System.out.println("您好,欢迎致电中国移动。请输入0~3选择业务办理"); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); //1 switch (x) { case 1: System.out.println("业务查询"); break; case 2: System.out.println("手机充值"); break; case 3: System.out.println("业务办理"); //break; case 0: System.out.println("人工服务"); break; default: System.out.println("请重新输入。。"); break; } ```
1)switch的表达式可以是变量或者是常量(int以下的整型或者字符型);case只能是常量,且数据类型必须与switch的数据类型一致。
2)**switch执行时,先和case进行匹配,匹配成功则执行case的语句块。**
3)**当前case语句执行完未用break结束,那么程序将继续执行下一个case语句,直到遇到break为止**
4)如果switch的值和case没匹配上,则执行default语句块。
```java char grade = 'A'; switch (grade) { //'E' case 'A': System.out.println("优秀"); break; case 'B': System.out.println("良好"); break; case 'C': System.out.println("及格"); break; default: System.out.println("不及格"); break; } //数据类型:基本数据类 + 引用数据类型 //额外拓展,JDK1.7以后支持String字符串类型 switch("gok") { case "gok": System.out.print("gok"); //break; case "tech": System.out.print("tech"); break; } ```
```java //利用执行case遇到break才中断执行特点 System.out.println("请输入季节(春天spring、夏天summer、秋天autumn、冬天 winter)"); Scanner sc1 = new Scanner(System.in); String season =sc1.next();//过滤空格 switch(season) { //case '春天': case "spring": case "春天spring": case "spring春天": System.out.print("春季主要在1~3月份。"); break; case "夏天": case "summer": case "夏天summer": case "summer夏天": System.out.print("夏季主要在4~6月份。"); break; case "秋天": case "autumn": case "秋天autumn": case "autumn秋天": System.out.print("夏季主要在7~9月份。"); break; case "冬天": case "winter": case "冬天winter": case "winter冬天": System.out.print("冬季主要在10~12月份。"); break; default: System.out.println("这是火星上的季节吗?"); } ```
switch和if的区别
- 如果条件的表达式 与switch语句中的case标记匹配,则switch语句更方便;
- 如果条件的表达式的值不在case的指定范围内,这种情况用if-else语句更有效率。
额外拓展-Scanner
通过JDK已经封装好的打印输入输入流Scanner 类来获取用户的输入。
//通过键盘输入获取数据
Scanner sc = new Scanner(System.in);
sc.nextInt();//接收整数
// nextLine方式接收字符串,可获得空白.
sc.close();//属于IO流的类如果不关闭会一直占用资源
次方:Math.pow(3,4)=81
开次方Math.pow(81.0, 1.0/4)=3
03-Java基本语法_循环
循环语句
程序重复执行,直到满足指定条件才停止的一段代码。在java中控制循环执行的条件有关系+逻辑运算符。
循环语句有:for循环、while循环、do...while循环
for循环
/*语法: for (初始化计数; 条件测试; 再求值参数)
{
循环体
}
其中,初始化计数:给循环变量赋初值;
条件测试:若为true,则执行循环体;否则退出循环,程序继续执行for循环后的语句。
再求值参数:控制循环变量的更新。*/
``` //输出1~10 for(int i=1; i<=10; i++) { System.out.println(i); //1 // break; } //死循环:只要让条件测试的条件结果满足不了 就会一直执行循环体. for(;;){ // 条件测试 默认为true 循环体 }
注意:
1)for循环三个部分必须用分号;<br/> 2)代表循环体的代码块,可以单句,也可以是复合语句。<br/> 3)for循环在执行循环前,先判断循环条件是否满足,再执行循环体。如果循环条件始终满足,则循环继续
```java
int j=0;
for(int i=0; ;i++) {
System.out.println("i="+i+",j="+j);
}
4)for循环可以包含部分定义或者不包含任何定义:for( ;num < 100;) 或 for( ; ;),"2条件测试"如果为空,则默认为真,所以循环始终继续,即死循环。
5)for循环可以不包含任何循环体,目的有助于提高某写算法的效率和创建时间延迟循环。
正确表达循环结构应该注意三方面问题:控制变量的初始化,循环的条件,控制变量的更新。
在for循环下,如果 循环条件满足,则重复执行循环体,直到条件不满足退出。
补充一个: 增强for循环:
//数组:
int[] arr ={1,2,3,4};
for (int i=0; i<arr.length; i++){ System.out.println(arr[i]); } //增强for循环: for( int num : arr ){ System.out.println(num); //arr[0] arr[1] }
while循环
/*语法:while (条件表达式) {//表达式为 关系+逻辑
循环体 //可以空、单句、语句块
}
*/
int a = 1;
while (a<11){ system.out.println(a); a++; }
//从控制台输出1~10 int i=1; while(i<11) { System.out.println(i); i++; } System.out.println("i="+i);
注意:1)表达式为true,循环就会迭代(遍历、循环)
2)和for循环一样,先判断循环条件是否满足,在执行循环体。
do...while循环
语法:do
{
语句;
}while (条件) ; //这里的分号不能省略!
注意:do...while循环,是先执行循环体,在判断循环条件是否满足。如果循环条件为false,则循环终止。
三个循环的区别和总结
- for和while语句先判断循环条件,而do...while语句后判断循环控制条件。
- 所以,for和while语句的循环体可能一次也不执行,而do-while语句的循环体至少执行一次。
- 三种循环可以处理统一问题,一般情况可以相互代替。但实际应用种,需要根据具体情况来选用不同循环语句。选用一般原则:
- 如果循环次数在执行循环体之前已经确定,一般用for循环
- 如果循环次数根据循环体的执行情况确定,则一般用while或者do-while语句:
- 当循环体至少执行一次则用do-while语句;若循环体可能一次也不执行时,则用while语句。
嵌套循环
一个循环出现在领域给循环中,则称它为嵌套循环。三种循环可以相互嵌套,自由组合。
其他控制语句
return
语法:return 表达式; //表达式可选。
一般用于方法内,表示终止当前正在执行的方法(函数),并将控制权返回到调用该函数的地方。
return语句可以带值,即返回一个值给调用该函数的地方。
注意:1)java中return作为程序结束语句,return后直接会结束函数。
2)return可以返回值,但只能一个,该返回值由函数方法声明定义。
3)一个函数可以使用多个return语句,但是遇到第一个return语句时终止当前方法并返回。
break
一般用于switch语句终止case。也可以用于在其他循环中突然终止循环。
当循环中遇到break语句,循环立即终止,并将控制权给循环后的语句。
在多层循环中。break只终止当前循环,控制权跳到外一层循环。
continue
只能在循环中使用,让循环结束这一次循环,进行下一次循环。即需要循环3次,变成终止一次进行下一次,结果就循环了2次。
课后作业
- switch表达式后面可是变量或常量,但case后面只能是常量(JDK1.7及以后支持字符串类型);这里的常量指字符型、整型int及其以下类型,不包括long,浮点型。
- case后面的:冒号不能省略。
- switch中,case语句开始执行只有遇到break才终止。
- if语句的表达式计算结果为boolean,由关系运算符和逻辑运算符组成
- 关系运算中== ,!= 等号两边类型保持一致
- if和else配对问题,else一般与同一块中最近且未与else相匹配的if配对。
- 一般 else与在其之上的if保持最近。就近原则。
- 条件语句 循环语句,如果包含的 语句集只有单句则可以省略{}。
- for 、while先判断循环条件,在执行循环体。do...while循环,是先执行循环体,在判断循环条件是否满足。如果循环条件为false,则循环终止。
```java // 计算1到10之间奇数之和及偶数之和, int a1 = 0, b1 = 0; for (int i = 1; i < 10; i++) { if (i % 2 == 0) { // 偶数 a1 += i; } else { b1 += i; } } ```