3.Java分支语句
3.1数据类型转换
Java是强类型的语言,数据的类型和保存数据的变量的类型必须一致。
那么int类型的变量能不能保存byte类型的数据呢?
byte类型的变量能不能保存int类型的数据呢?
一般情况下,小的数据可以放在大的数据类型中,JVM可以实现自动类型转换。
如果要把大的数据放进小的变量中,需要手动类型转换:
变量=(变量类型)值;
int a = 10; byte b = (byte)a;
注意:
(1)手动类型转换有可能会造成数据丢失
·大整型转变为小整型:抛弃高字节,保留低字节
·浮点转变为整型:抛弃小数部分,保留整数部分
·双精度浮点转变为单精度浮点:损失数据精度
(2)不是所有的类型都能手动进行类型转换
·boolean类型不能和其他基本类型互相转换
自动类型提升:两个数值参与运算,会发生自动类型提升
规则:参与运算的两个数值:如果有double类型,运算结果为double类型,如果有float类型,运算结果为float类型,如果有long类型,运算结果为long类型,否则运算结果为int类型
3.2运算符
运算符分为数学运算符,赋值运算符,布尔运算符,位运算符和三元运算符
数学运算符:+,-,*,/(两个整型运算的结果还是整型,小数部分被舍弃),%
赋值运算符:=:把右边的值赋给左边的变量
注意:左边必须是变量不能是表达式或者常数
赋值运算符:+=,-=,*=,/=,%=……
自增自减运算符:++,--,此类运算符不会发生自动类型提升。
布尔运算符:
==:判断两边的值是否相等,相等则值为true,否则值为false
<,<=,>,>=,!=:判断不等式是否成立
布尔运算符:
!:逻辑非:!false = true !true = false
&&:逻辑与 同真为真
||:逻辑或 有真为真
位运算符:
&、|既是位运算符,也是逻辑运算符,作用和&&、||相同。
&&、||是短路运算符
&、|是非短路运算符
短路运算:当一个子表达式的值能决定整个表达式的值时,后面的所有子表达式的值不再计算。
三元运算符:a?b:c
规则:a为布尔表达式,b和c为同一类型的表达式或值,当a为ture时,整个表达式为b的值,否则为c的值。(表达式是可以嵌套的)
3.3顺序语句
Java中的语句分为:顺序语句,分支语句,循环语句,控制语句,在Java中使用分号表示一个语句的结束。
顺序语句:
(1)赋值语句:给变量赋值
(2)输入语句:把数据传入到Java虚拟机内部
(3)输出语句:把Java虚拟机内部的数据传出
(4)函数调用语句:执行一段特定的代码
输入语句:
Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); double d = scanner.nextDouble(); String s1 = scanner.next(); String s2 = scanner.nextLine(); scanner.close();
输出语句:
System.out.println(10); System.out.println("10"); System.out.println(); System.out.print(10); System.out.print("10"); System.out.print();
3.4分支语句
当某个条件满足时才执行某个代码块
if语句:
if(布尔表达式){ }
if(布尔表达式){ }else{ }
多分支的if语句:在if和else之间,可以写若干个else if,使if语句实现多个分支:
if ( 布尔表达式 ) {……} // 第一个分支 else if( 布尔表达式 ) {……} // 第二个分支 else if( 布尔表达式 ) {……} // 第三个分支 else {……} // 第四个分支
if else语句是可以进行嵌套使用的,也就是if else语句中还可以写if else语句
switch语句:
if (a == 1) { System.out.println("a = 1"); } else if (a == 2) { System.out.println("a = 2"); } else if (a == 3) { System.out.println("a = 3"); } else { System.out.println("error"); }
if语句还是存在一些问题的,比如,如果所有的if/else语句中if语句中的布尔表达式都为false,会导致代码的执行效率低,这个时候我们就可以选择使用switch语句来进行选择分支
// ① switch( 表达式 ) { case 值1: // ② case 值2: // ③ case 值3: // ④ } // ⑤
switch语句表达式的类型:byte,short,int,char,java.lang.String,枚举,不能是boolean类型
case后面值的类型:必须是常量或者枚举值,不能是表达式
switch语句存在的问题:
在每一个分支中的代码块执行完以后,不会跳出switch语句,而是会继续执行下一个分支中的代码块,直到整个switch语句执行完为止。
如果想在执行完一个代码块后就跳出switch语句,需要在每个分支的代码块最后增加break语句。
如果表达式的值和case后面的值都不相等,可以使用default子句,这时会执行default后面的代码块。
switch语句总结:可以有多个case子句,最多有一个default子句,case和default子句的顺序无关紧要。
在switch语句中可以嵌套switch语句,同时也可以和if语句相互嵌套
3.5练习
(1)从键盘输入一个表示年份的正整数,输出此年份是平年还是闰年。请使用至少两种方法实现。
import java.util.Scanner; public class Java_day03_01 { public static void main(String[] args){ Scanner year = new Scanner(System.in); int years = year.nextInt(); if(years%400==0){ System.out.println("闰年"); } else if (years%4==0 && years%100!=0){ System.out.println("闰年"); } else{ System.out.println("平年"); } } }
(2)从键盘输入一个表示百分制分数的正整数,请使用switch语句实现按以下规则输出中文分数:
100~90:优 89~80:良 79~70:中
69~60:及格 59~0:不及格 其它:错误
import java.util.Scanner; public class Java_day03_02 { public static void main(String[] args){ Scanner s = new Scanner(System.in); int num = s.nextInt(); switch (num/10){ case 0: case 1: case 2: case 3: case 4: case 5:System.out.println("不及格");break; case 6:System.out.println("及格");break; case 7:System.out.println("中");break; case 8:System.out.println("良");break; case 9: case 10:System.out.println("优");break; default:System.out.println("错误");break; } } }
(3)从键盘输入任意三个整数,请使用三元运算符找出这三个整数中的最大值并输出。
import java.util.Scanner; public class Java_day03_03 { public static void main(){ Scanner a = new Scanner(System.in); int q = a.nextInt(); int w = a.nextInt(); int e = a.nextInt(); int max = q>w?q:w; max = max<e?e:max; System.out.println(max); } }