第三单元
java逻辑运算符的基本用法
逻辑运算符:
&(并且),|(或),!(非),^(异或),&&(短路与),||(短路或)
*注意:
a.逻辑运算符一般用于连接boolean类型的表达式或者值。
b.表达式:就是用运算符把常量或者变量连接起来的Java语法的式子
结论:
&逻辑与:有false则false
|逻辑或:有true则true
^逻辑异或:相同为false,不同为true。
!逻辑非:非false则true,非true则false.
&&和&的区别:
a.最终结果都一样
b.&&具有短路效果。 左边如果是false则右边不执行。
同理||和|的区别就是:
||具有短路效果,左边如果是true则右边不执行。
Java位运算符的基本用法
位运算符:
&(与),|(或),^(异或),~(按位取反),<<(左移),>>(右移),>>>(无符号右移)
*注意:位运算是直接对二进制补码进行运算。运算效率高一些
结论:
&:有0则0
|:有1则1
^:相同则0,不同则1
~:按位取反 0变1 1变0 符号位也包含在内取反
<<:左移 空位补0,被移除的最高位丢弃。
>>:右移 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1
>>>:无符号右移 被移位二进制最高位无论是0或者1,空却位都用0补。
eg:a.正数的按位反: +9
原码:00001001
补码:00001001
反码:00001001
按位取反:1 1110110 补码
- 1
————————————————
1 1110101 反码
1 0001010 原码
最后结果是: -10
b.负数的按位取反: -9
原码: 1 0001001
反码: 1 1110110
补码: 1 1110111
负数的补码按位取反:0 0001000 的到正数 正数的原反补一样
最后结果: 8
*^位异或运算符的特点:一个数据被另一个数据位异或两次,该数本身不变。
自己位异或自己是0 eg:8^8 结果是0
*<< : 把<<左边的数据乘以2的移动次幂 eg:10<<3 结果10*2^3=80
10 的补码 00001010
左移三位: 01010000 64+16
>> : 把>>左边的数据除以2的移动次幂 eg:40>>3 结果40/2^3=5
40 的补码 00101000
右移三位: 00000101 4+1
值交换问题:
int a=10;
int b=20;
方式1:找一个中间变量
int t;
t=a;
a=b;
b=t;
方式2:^位异或运算符的特点 一个数据被另一个数据位异或两次,该数本身不变
a=a^b;
b=a^b; //a^b^b b=a
a=a^b; // a^b^a a=b
方式3:
a=a+b;
b=a-b;
a=a-b;
方式4:
b=(a+b)-(a=b);
java三元运算符的基本用法
三运运算符的格式:
(关系表达式) ? 表达式1 : 表达式2;
int a=(10>20)?30:50; a=50
执行流程:
计算括号内的表达式,如果位true,运算结果是30
如果是false,运算结果是50
java键盘录入的基本格式
为了让程序的数据更符合开发的数据,让程序灵活起来
a.导包
格式:import java.util.Scanner; 写在class上面
b.创建键盘录入对象
格式: Scanner sc = new Scanner(System.in);
c.通过对象获取数据
格式: int x =sc.nextInt();
java顺序结构语句
流程控制语句:
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能
流程控制语句的分类:
顺序结构
选则结构
循环结构
顺序结构就是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行
执行流程:从上往下,依次执行
java选择结构if语句
也被称为分支结构
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断
逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码
选择结构的分类:
if语句
switch语句
if语句有三种格式:
格式1:
if(比较表达式或者是boolean类型的值){
语句体;
}
执行流程:执行括号里表达式如果是true就执行语句体,false则跳过
格式2:
if(比较表达式){
语句体1;
}else{
语句体2
}
执行流程:执行括号里表达式如果是true就执行语句体1,false则执行语句体2
格式3:
if(比较表达式){
语句体1;
}else if(比较表达式2){
语句体2;
}else if(比较表达式3){
语句体3;
}
...
else{
语句体n+1;
}
执行流程:执行括号里的表达式如果是true就执行语句体1结束if语句。
false则执行表达式2如果是true就执行语句体2结束if语句。
false则执行表达式3如果是true就执行语句体3结束if语句。
.....
如果都是false就执行else里的语句体n+1
三元运算符与if语句的格式2:
三元运算符实现的,都可以采用if语句实现,反之不成立
当if语句控制的操作是一个输出语句的时候就不能用三元运算符。
因为三元运算符是一个运算符,运算符操作完毕就应该就有一个结果。
总计:
a.比较表达式无论简单还是复杂,结果必须是boolean类型
b.if语句控制的语句体如果是一条语句大括号可以省略,多条语句则大括号省略不了
java选择结构switch语句
switch语句的表达式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n+1;
break;
}
switch语句的格式解释:
a.表达式取值:byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是String
b.case后面跟的是要和表达式进行比较的值
c.语句体部分可以是一条或者多条语句
d.break表示中断,意思就是结束switch语句
e.default语句表示所有情况都不匹配的时候,就执行该语句,和if语句里的else相似
执行流程:
先计算表达式的值,然后和case后面的值匹配,如果匹配成功就执行对应的语句,遇到break就会结束,否则执行default控制的语句。
*注意:
a.case后面只能是常量不能是变量,而且多个case后面的值不能出现相同的值
b.default可以省略但不建议,因为它的作用是对不正确的情况给出提示
c.break可以省略,但是结果可能是我们不想要的。会出现一个现象:case穿透
d.default可以在任意位置。但是建议在最后
java 选择语句if和switch语句
if语句使用的场景:
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断
switch语句使用的场景:
针对几个常量值的判断
java switch语句和if语句的案列
class IfDemo1{
public static void main(String[] args){
int a=10;
int b=20;
int max=0;
if(a>b){
max=a;
}else{
max=b;
}
System.out.println("最大值是:"+max);
}
}
if语句案列2:
import java.util.Scanner;
class IfDemo2{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的成绩:");
int a=sc.nextInt();
if(a>=90&&a<=100){
System.out.println("优秀");
}else if(a>=80&&a<=89){
System.out.println("良");
}else if(a>=70&&a<=79){
System.out.println("中");
}else if(a>=60&&a<=69){
System.out.println("及格");
}else if(a>=0&&a<=59){
System.out.println("差");
}else{
System.out.println("请重新输入你的成绩:");
}
}
}
import java.util.Scanner;
class SwitchDmeo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("你是什么专业的 A挖掘机专业B美容美发专业C JAVA专业D机械自动化专业");
String a=sc.next();
switch(a){
case "A":
System.out.println("挖掘机专业");
break;
case "B":
System.out.println("美容美发专业");
break;
case "c":
System.out.println("JAVA专业");
break;
case "D":
System.out.println("机械自动化");
break;
default:
System.out.println("请重新输入");
break;
}
}
}
第四单元
Java循环结构概述和for语句
循环语句在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改位false,从而结束循环,否则循环将一直执行下去,形成死循环
分类:
for循环
while循环
for循环语句的格式:
for(初始化表达式;判断条件语句;控制条件语句){
循环体语句;
}
执行流程:
1.执行初始化表达式语句
2.执行判断条件语句,看起返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
3.进入循环体语句并执行
4.执行控制语句
5.回到第二步继续执行
java循环结构while语句
while语句的格式:
while循环的基本格式:
while(判断条件语句){
循环体语句;
}
完整格式:
初始化条件语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
执行流程:
1.执行初始化条件
2.执行判断语句,看其返回值是true还是false
如果是true就继续执行
如果是false则跳出循环
3.执行循环体语句
4.执行控制条件语句
5.回到2继续执行
java循环结构do…while语句
do...while语句的格式:
do{
循环体语句;
}while(判断条件语句);
完整格式:
初始化条件语句;
do{
循环体语句;
控制条件语句;
}while(判断条件语句);
执行流程:
1.执行初始化条件语句
2.执行循环体语句
3.执行控制语句
4.判断条件语句,看其返回值是true还是false
如果是true就继续执行
如果是false跳出循环
5.回到2
java循环机构案列
class ForDemo{
public static void main(String[] args){
for(int i=100;i<999;i++){
int a=i/100%10;
int b=i/10%10;
int c=i/1%10;
if(a*a*a+b*b*b+c*c*c==i){
System.out.println("水仙花数:"+i);
}
}
}
}
class WhileDemo{
public static void main(String[] args){
int i=100;
int count=0;
while(i>=100&&i<=999){
int a=i/100%10;
int b=i/10%10;
int c=i/1%10;
if(a*a*a+b*b*b+c*c*c==i){
System.out.println("水仙花数:"+i);
count++;
}
i++;
}
System.out.println("水仙花个数:"+count);
}
}
class DoWhileDemo{
public static void main(String[] args){
int i=100;
int count=0;
do{
int a=i/100%10;
int b=i/10%10;
int c=i/1%10;
int counter=0;
if(a*a*a+b*b*b+c*c*c==i){
System.out.println("水仙花数:"+i);
count++;
}
i++;
}while(i>=100&&i<=999);
System.out.println("水仙花个数:"+count);
}
}
java控制跳转语句
什么是跳转语句:
比如说,我想在某个循环执行到某一步的时候就结束,现在就做不了这件事情
为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断
分类
break 中断
continue 继续
return 返回
break的使用场景:
1.在选择结构switch语句中
2.在循环语句中
注意:离开使用场景的存在是没有意义的
作用:
1.退出单层循环
2.退出多层循环(几乎不使用)
要想实现这个效果,就必须知道一个东西,带标签的语句;
格式: 标签名:语句
continue的使用场景
在循环语句中
作用
跳出一次循环,执行下一步操作
return的作用
return 就是退出一个方法
跳转到上层调用的方法。
案列演示:
return: 结束当前方法
break: 结束单层循环
continue: 结束当前循环,执行下一次循环
Java方法概述和格式说明
为了解决代码重复编写的问题,可以将重复编写代码的代码提取出来放在一个{}中,并为这段代码七个名字
这样在每次重复编写代码的地方通过调用这个名字就可以了。上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法
什么是方法
方法就是完成特定功能的代码块
在很多语言中都有函数的定义,在Java中,我们称之为方法
方法的格式
修饰符 返回值类型 方法名(参数类型 参数1,参数类型 参数2....){
方法体;
return 返回值;
}
方法格式的详细说明
1.修饰符 public static ...
2.返回值类型 用于限定返回值的数据类型
3.方法名 就是一个名称,它的存在是为了方便我们调用方法
4.参数类型 限定调用方法时传入参数的数据类型
5.参数名 就是一个变量,接受调用方法时传入的参数
这个参数被称之为形式参数,它的作用是用来接受实际参数的。
6.方法体 完成功能的代码
7.return 结束方法以及返回方法指定类型的值
8.返回值 就是功能的结果,由return带回,带给调用者
如何写一个方法
两个明确:1.返回值类型 明确功能结果的数据类型
2.参数列表 你要传递几个参数,以及每一个参数的数据列表
方法调用(有明确返回值的调用)
1.单独调用 一般来说没有意义,所以不推荐
2.赋值调用 推荐方法
3.输出调用 但是不够好,因为我们可能需要针对结果进行进一步的操作
*注意:
1.方法不调用不执行
2.方法与方法是平级关系,不能嵌套定义
3.方法定义的时候参数之间用逗号隔开
4.方法调用的时候不用在传递数据类型
5.如果方法有明确的返回值,一定要由retur带回一个值
java方法案列
class Method{
public static void main(String[] args){
multiplication();
}
public static void multiplication(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println("\n");
}
}
}
java方法的重载
重载:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同,与返回值无关。
参数列表不同:
1.参数个数不同
2.参数类型不同