【第一阶段 day13 java基础】运算符 流程控制

本文详细介绍了运算符如四则运算、取余、自增自减、比较和逻辑运算,以及流程控制的顺序结构、分支结构、选择结构和循环结构。通过实例演示了如何运用这些概念解决实际问题,如判断、打折和成绩统计等。

1.运算符

在这里插入图片描述

(1)普通的四则运算符: + - * / (算数运算符)

普通的运算符不能改变变量本身的值,除非将表达式的结果重新赋值,才会改变变量本身的值

(2)取余/求模:%(算术运算符)

 6%5==1   [余数为1]
 4%2==0   [余数为0表示整除]

练习:测试取余运算符(算术运算符)

package cn.tedu.basic;
/**
 * 这个类用来测试取余运算符(算术运算符)
 */
public class TestOperator {
	//1.创建程序的入口函数main
	public static void main(String[] args) {
		/**1.基本的四则运算符 + -/ * */
		//1.除法与取余
		System.out.println(35/10);//3  int/int->int
		/**2.%为取余符号,运算结果与余数的值相同
		   *        整除是取余的结果就是0
		 */
		System.out.println(35%10);//5  
		System.out.println(10%2);//0
		
		//2.练习1:求一个两位数的十位与个位
		int x=59;
		System.out.println(59/10);
		System.out.println(59%10);
		
		//3.练习2:求一个三位数的百位十位与个位
		int y=159;
		System.out.println(159/100);
		System.out.println(159/10%10);
		System.out.println(159%10);
		
		int z=345;
		System.out.println(345/100);
		System.out.println(345%100/10);
		System.out.println(345%10);
		

	}

}

(3)自增自减运算符

 自增 ++ 表示给变量的值+1
 自减 -- 表示给变量的值-1

前缀式:++a --a :先改变变量的值,再使用
后缀式:a++ a-- :先使用,再改变变量本身的值
注意:前面的代码会对后面的代码产生影响
注意:前缀式和后缀式都会改变变量的值,只是时机不同

练习:测试自增自减运算符(算术运算符)

package cn.tedu.basic;
/**
 * 本类用于测试自增自减运算符(算术运算符)
 */
public class TestOperator2 {
	// 1.创建程序的入口函数
	public static void main(String[] args) {
		/**
		 * 自增运算符:++  :变量的值+1
		 * 自减运算符:--  :变量的值-1
		 * 前缀式:符号写在前  ++a  --a,先改变变量本身的值再使用
		 * 后缀式:符号写在后 a++  a--,先使用再改变变量本身的值
		 */
		int a=1;//先使用再自增
		System.out.println(a++);//1
		System.out.println(a);//2
		
		
		int b=1;//先自增再使用
		System.out.println(++b);//2
		System.out.println(b);//2
		
		int c=1;
		System.out.println(c--);//1
		System.out.println(c);//0
		
		int d=1;
		System.out.println(--d);//0
		System.out.println(d);//0
		
		/*
		 * 前面的代码会对后面的代码有影响
		 * 自增自减运算符会改变变量本身的值
		 * 但是普通的四则运算符不会改变变量本身的值,只会改变算式的结果
		 */
		System.out.println(c);
		System.out.println(--c-c-c--);//(-1)-(-1)-(-1)=1
		System.out.println(c);//-2
		System.out.println(--a-a+--a);//1-1+0=0
		System.out.println(a);//0
		System.out.println(b+++--b+b--);//2+2+2=6
		System.out.println(b);//1
		System.out.println(d--+--d+d--);//0+(-2)+(-2)=-4
		System.out.println(d);//-3
	}

}

(4)比较运算符

  • [ >= <= > < ]
  • ==[左右两边的值是否相等] !=[左右两边的值是否不相等]
  • 注意:比较运算符的结果都是Boolean类型

(5)逻辑运算符:& && | ||

& 单与(and):全真则真
&& 双与/短路与:判断逻辑与单与相同,只不过添加了一个短路的效果.如果左边以判断为false,右边则不需判断

1  1  1
1  0  0
0  1  0
0  0  0

| 单或(or):全假则假
|| 双或/短路或:判断逻辑与单或相同,只不过添加了一个短路的效果.如果左边以判断为true,右边则不需判断

1  1  1
1  0  1
0  1  1
0  0  0

(6)三目运算符: 1?2:3

格式:1号位置为表达式,1为真取2号位置的值,1为假取3号位置的值
练习:运算符的综合练习

package cn.tedu.basic;

import java.util.Scanner;

/**
 * 接收用户输入的两个整数,比较这两个数的最大值(三目运算符)
 */
public class TetMaxNum {
	//0.创建程序的入口函数
	public static void main(String[] args) {
		//1.提示并接收用户输入的两个整数
		System.out.println("输入要比较的第一个数:");
		int a=new Scanner(System.in).nextInt();
		System.out.println("输入要比较的第二个数:");
		int b=new Scanner(System.in).nextInt();
		//2.比较出这两个数的最大值
//		System.out.println("比较两个数的大小:");
//		int max=a>b?a:b;
//		//3.将比较的结果输出到控制台
//		System.out.println("这两个数中,最大值是:"+max);
		
		//思考题:利用三元运算符,比较三个数的最小值
		System.out.println("输入要比较的第三个数:");
		int c=new Scanner(System.in).nextInt();
		int m=a>b?b:a;
		int r=m>c?c:m;
		System.out.println("这三个数中,最小值是:"+r);
	}

}

(7)赋值运算符

= 普通的赋值运算符,等号右边的值交给等号左边来保存

练习:运算符的综合练习

package cn.tedu.basic;

import java.util.Scanner;
/**
 * 本类用于运算符的综合练习
 */
/*
 * 需求:接收用户输入的年份,判断是平年还是闰年
 * 如果年份是闰年,需要满足下面两个条件之一:
 * 条件1:能被4整除,并且不能被100整除
 * 条件2:能被400整除
*/
public class TestYear {
	//0.创建程序的入口函数main
	public static void main(String[] args) {
		//1.提示并接收用户输入的函数
		System.out.println("请输入年份:");
		int year=new Scanner(System.in).nextInt();
		//2.定义一个变量用来保存结果
		String result="平年";
		//3.只要符合闰年的判断条件,就改为闰年
		if(year%400==0||(year%4==0&&year%100!=0)) {
			result="闰年";
		}
		//4.将结果输出
		System.out.println(year+"年是"+result);
	}
}

2.流程控制

在这里插入图片描述

(1)顺序结构

程序执行先找到入口函数main(),然后再一行一行往下执行,并且所有的代码都会执行到
顺序结构可以帮我们进行计算,输出等操作,但是不能选择性的执行代码

(2)分支结构

分支结构可以帮我们先做判断,根据判断,选择性执行代码

单分支结构

		if(判断条件){
		      符合判断条件后要执行的代码,如果不符合判断条件,跳过此句
		}

多分支结构

		if(判断条件) {
			满足判断条件,执行代码1
		}else{
			不满足判断条件,执行代码2
		}
char gender='男';
		if(gender=='男') {
			System.out.println("男生");//如果满足条件执行此代码
		}else {
			System.out.println("女生");//如果不满足条件执行此代码
		}

嵌套分支结构

		if(判断条件1) {
			满足判断条件1,执行代码1
		}else if(判断条件2) {
			满足判断条件2,执行代码2
		}else if(判断条件3) {
			满足判断条件3,执行代码3
		}else{
			满足判断条件4,执行代码4
		}

练习:嵌套分支的商品打折案例

package cn.tedu.basic;
/**
 * 本类用于练习嵌套分支的商品打折案例
 */
import java.util.Scanner;
/**
 * 需求: 接收用户输入的原价。满1000打9折;满2000打8折;满5000打5折
 */
public class TestDiscount {
	//0.创建程序的入口main
	public static void main(String[] args) {
		//1.提示并接收用户输入的原价
		System.out.println("请您输入商品的原价:");
		double price=new Scanner(System.in).nextDouble();
		//2.定义一个变量用来保存最终支付的实际价格
		double count=price;
		//判断原价在什么档位
		if(price<=0) {
			System.out.println("输入错误!");
		}else {
			if(price>=5000) {//满5000
				count=price*0.5;//打5折
			}else if(price>=2000) {//满2000
				count=price*0.8;//打8折
			}else if(price>=1000) {//满1000
				count=price*0.9;//打9折
			}else {
				count=price;
			}
			//输出结果
			System.out.println("您的原价是:"+price+",需要支付的实际价格是:"+count);
		}
	}
}

练习:分支结构统计学员得分段位

package cn.tedu.basic;
/**
 * 本类用于练习分支结构统计学员得分段位
 */
import java.util.Scanner;
/**
 *90分及以上  优秀
 *80-89 良好
 *70-79 中等
 *60-69 及格
 *60分及以下 不及格 
 */
public class TestScore {
	//0.创建程序的入口函数
	public static void main(String[] args) {
		int statue=0;
		/**
		 * 增强程序的健壮性
		 * 我们需要在判断段位之前,判断用户的数据是否有效
		 */
		do{
			//1.提示并接收学员的成绩
			System.out.println("请输入学员的成绩:");
			int score=new Scanner(System.in).nextInt();
			//2.判断学员的分数段位,并输出结果
			if(score>100||score<0) {
				System.out.println("输入错误!");
				statue=1;
			}else {
				if(score>=90) {
					System.out.println("优秀");
					statue=0;
				}else if(score>=80) {
					System.out.println("良好");
					statue=0;
				}else if(score>=70) {
					System.out.println("中等");
					statue=0;
				}else if(score>=60) {
					System.out.println("及格");
					statue=0;
				}else {//表示上面的所有条件都不满足,才会执行此处的代码
					System.out.println("不及格");
					statue=0;
				}
			}
		}while(statue==1);
	}
}

(3)选择结构

switch结构

  • 1.变量a的类型支持byte,short,int,char,string
  • 2.执行顺序:会拿着变量a的值,依次与每个case后的值做比较
    如果匹配到,就会执行这个case后的语句
    如果case后面没有加break,会执行后面所有的case的代码(包括default),我们称之为’'穿透")
  • 3.如果设置了default保底选项,没有任何case匹配到,就会执行default后的语句
  • 4.break与default是保底选项,可加可不加,根据自己的业务进行选择

练习:选择结构switch

package cn.tedu.basic;
/**
 * 本类用于练习选择结构switch
 */
/*
 * 总结:
 * 1.变量a的类型支持byte,short,int,char,String
 * 2.执行顺序:会拿着变量a的值,依次与每个case后的值作比较
 *   如果匹配到,就会执行这个case后的语句
 *   注意:如果case后面没有加break,会执行后面所有的case的代码(包括default),我们称之为"穿透"
 * 3.如果设置了default保底选项,没有任何case匹配到,就会执行default后的语句
 * 4.break与default是可选项,可加可不加,根据自己的业务进行选择
 */
public class TestSwitch {
	//0.创建入口函数main
	public static void main(String[] args) {
		int a=3;
		switch(a) {
		case 1:System.out.println("结果是1");break;
		case 2:System.out.println("结果是2");break;
		case 3:System.out.println("结果是3");break;
		case 4:System.out.println("结果是4");break;
		case 5:System.out.println("结果是5");break;
		default:System.out.println("没有匹配成功");

		}
	}
}


练习:选择结构switch的巩固练习

package cn.tedu.basic;
/**
 * 本类用于switch结构的巩固练习
*/
public class TestSwitch2 {

	public static void main(String[] args) {
		String s="周四";
		
		switch(s) {
		case "周一":System.out.println("周一吃火锅");break;
		case "周二":System.out.println("周二吃小龙虾");break;
		case "周三":System.out.println("周三吃鱼头汤");break;
		case "周四":System.out.println("周四吃麻辣香锅");break;
		case "周五":System.out.println("周五吃热干面");break;
		case "周六":System.out.println("周六吃糖葫芦");break;
		case "周日":System.out.println("周日吃黄焖鸡");break;
		default:System.out.println("不吃");
		}
	}
}

注意事项:
(1)变量a支持的类型:byte short int char string
(2)变量a的数据类型与case后value的数据类型保持一致
(3)如果没有添加break,并且又有case没有被匹配到,会发生"穿透"现象,包括default
(4)case的个数没有具体的规定
(5)如果添加了default保底选项,有没有任何case匹配到,读取default后的语句
(6)一般我们习惯在每个case后面添加一个break

(4)循环结构

当你想多次重复干某一件事的时候,可以使用循环语句

for(开始条件;循环条件;更改条件) {
			循环
		}
for(int i=1;i<=10;i++) {
			System.out.println(i);
		}

3.复习:

(1)分支结构复习

完成单分支结构,多分支结构,嵌套分支结构的复习

package cn.tedu.review;

import java.util.Scanner;

/**
 * 本类用于复习分支结构
 */
public class TestIf {
	//0.创建程序的入口函数main
	public static void main(String[] args) {
		/**
		 * 1.单分支结构
		 * 接收用户在键盘输入的行数
		 */
		System.out.println("请输入一个数a:");
		int a=new Scanner(System.in).nextInt();
		if(a>=50) {
			System.out.println("满50!");
		}
		if(a>=30&&a<50) {
			System.out.println("满30!");
		}
		
		/**
		 * 2.多分支结构
		 * 接收用户在键盘输入的行数
		 */
		System.out.println("用户输入了多少行代码?");
		int num=new Scanner(System.in).nextInt();
		if(num>=70000) {
			System.out.println("恭喜你,拥有高新offer!");
		}else{
			System.out.println("加油!");
		}
		
		/**
		 * 3.嵌套分支结构
		 * 接收用户的身高和体重,测试用户的BMI指数
		 * 计算式=体重/身高的平方,得到的结构按如下输出:
		 * <18.5过轻  <=22.9正常  <=24.9偏胖 <=40重度配胖 更大是极度肥胖
		 */
		System.out.println("请输入您的身高:");
		double h=new Scanner(System.in).nextDouble();
		System.out.println("请输入您的体重:");
		double w=new Scanner(System.in).nextDouble();
		double b=w/(h*h);
		System.out.println("您的BMI指数为:");
		if(b<0) {
			System.out.println("BMI指数错误");
		}else {
			if(b<18.5) {
				System.out.println("过轻");
			}else if(b<=22.9) {
				System.out.println("正常");
			}else if(b<=24.9) {
				System.out.println("偏胖");
			}else if(b<=40) {
				System.out.println("重度配胖");
			}else {
				System.out.println("极度肥胖");
			}
		}
	}
}

(2)选择结构复习

完成switch选择结构的复习

package cn.tedu.review;
import java.util.Scanner;
/**
 * 本类用于复习选择结构
 */
public class TestSwitch {

	public static void main(String[] args) {
		
		System.out.println("请输入您的令牌号:");
		String s=new Scanner(System.in).nextLine();
		
		switch(s) {
		
		case "天":System.out.println("请玩家进入天字一号房间");break;
		case "地":System.out.println("请玩家进入地字二号房间");break;
		case "玄":System.out.println("请玩家进入玄字三号房间");break;
		case "黄":System.out.println("请玩家进入黄字四号房间");break;
		case "宇":System.out.println("请玩家进入宇字五号房间");break;
		case "宙":System.out.println("请玩家进入宙字六号房间");break;
		case "洪":System.out.println("请玩家进入洪字七号房间");break;
		case "荒":System.out.println("请玩家进入荒字八号房间");break;
		default :System.out.println("输入错误");
		}

	}

}

(3)循环结构复习

完成for循环结构的复习

package cn.tedu.review;

public class TestFor {

	public static void main(String[] args) {
		/**1.格式
		 * for(开始条件;循环条件;更改条件){
		 * 符合条件的语句
		 * }
		 */
		//1.打印数字0-10
		for(int i=0;i<=10;i++) {
			System.out.print(i+" ");
		}

		System.out.println();

		//2.打印数字10-0
		for(int i=10;i>=0;i--) {
			System.out.print(i+" ");
		}

		System.out.println();

		//3.打印100次good good
		for(int i=0;i<100;i++) {
			System.out.println("good good");
		}

		//4.打印8 88 888 8888
		//开始:8  结束:8888 如何变化:*10+8
		for(int i=8;i<=8888;i=i*10+8) {
			System.out.print(i+" ");
		}
	}
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值