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:
	代码块2break
....
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的区别
  1. 如果条件的表达式 与switch语句中的case标记匹配,则switch语句更方便;
  2. 如果条件的表达式的值不在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,则循环终止。

三个循环的区别和总结

  1. for和while语句先判断循环条件,而do...while语句后判断循环控制条件。
  2. 所以,for和while语句的循环体可能一次也不执行,而do-while语句的循环体至少执行一次。
  3. 三种循环可以处理统一问题,一般情况可以相互代替。但实际应用种,需要根据具体情况来选用不同循环语句。选用一般原则:
    • 如果循环次数在执行循环体之前已经确定,一般用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次。

课后作业

  1. switch表达式后面可是变量或常量,但case后面只能是常量(JDK1.7及以后支持字符串类型);这里的常量指字符型、整型int及其以下类型,不包括long,浮点型。
  2. case后面的:冒号不能省略。
  3. switch中,case语句开始执行只有遇到break才终止。
  4. if语句的表达式计算结果为boolean,由关系运算符和逻辑运算符组成
  5. 关系运算中== ,!= 等号两边类型保持一致
  6. if和else配对问题,else一般与同一块中最近且未与else相匹配的if配对。
  7. 一般 else与在其之上的if保持最近。就近原则。
  8. 条件语句 循环语句,如果包含的 语句集只有单句则可以省略{}。
  9. 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; } } ```