1.回顾
1.1自动类型转换
package day_03text;
public class Text1 {
/**
* 回顾
*/
public static void main(String[] args) {
//System.out.println(Long. MAX_VALUE);
long L = 9223372036854775807L;
System.out.println(L);
//浮点型的32位是存储的科学计数法,而整数保存的是二进制
//所以float的32位的最大值远远大于long的64位的最大值,所以long到float是自动类型转换
//System.out.println(Float. MAX_VALUE);
float f = 3.4028235E38F;
System.out.println(f);
}
}
1.2小数相加
package day_03text;
public class Text2 {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
//0.30000000000000004
//内存中有些小数无法存储,需要注意,千万不能使用小数做判断
System.out.println(a+b);
}
}
1.3赋值运算
package day_03text;
public class Text2 {
/**
* 赋值运算为右结合,并且*=和+=的优先级是一致的
* 从右到左开始计算,但是依然是从左到右初始化
*/
public static void main(String[] args) {
int a1 =5;
a1 *= a1 += a1 += a1;
//5*=5+=5+=5;
//75;a1 = 75
System.out.println(a1);
//*= += 等等都是赋值运算符,不同于算术运算符,不能放到后面参与运算,只能放到前面作为赋值
a1 += 2 + ++a1;
System.out.println(a1);
}
}
2.运算符
2.1三目运算符
package day_03text;
public class Text3 {
/**
* 三目运算符:又叫做三元运算符
* 语法:布尔型表达式 ? 真语句 : 假语句 ;
* 布尔型表达式:结果只要是布尔型即可(true/false)
*/
public static void main(String[] args) {
int a =10;
int b = 20;
String result = a > b ?"a大于b" : "a小于b";
System.out.println(result);
}
}
2.2字符串连接符
package day_03text;
public class Text4 {
/**
* 字符串拼接符:+
* +即是加和运算 也是字符串拼接符,用于把多个数据合并为一个字符串
* 任何数据 只要是和字符串进行 + 拼接,都可以得到新的字符串
*/
public static void main(String[] args) {
int a = 12;
int b =21;
System.out.println(a+b);
//需求 :打印a+b=30
//a+b=1221
System.out.println("a+b="+a+b);
//a+b=30 如果把a+b写到字符串中,则不会被解析为变量,只是一个普通的字符串
System.out.println("a+b="+(a+b));
//需求:打印12+21=33
//12+21=33
System.out .println(a+"+"+b+"="+(a+b));
}
}
3.流程控制
控制我们程序的执行流程和分支
/**
* 流程控制有三种情况
* 1 顺序结构: 从上往下,从左到右执行,相当于马路只有一条路,没有任何分叉口
* 2 分支结构:相当于过马路有个分叉口,可以根据当前情况进行选择走那条路
* 3 循环结构:重复做某一件事,类似于在操场跑步
*/
3.1顺序结构
严格从上往下从左到右执行即可
package day_03text;
public class Text5 {
/**
* 流程控制有三种情况
* 1 顺序结构: 从上往下,从左到右执行,相当于马路只有一条路,没有任何分叉口
* 2 分支结构:相当于过马路有个分叉口,可以根据当前情况进行选择走那条路
* 3 循环结构:重复做某一件事,类似于在操场跑步
*/
public static void main(String[] args) {
int a =10;
int b =11;
//第一个条件为false,第二个不执行了
boolean c = (a>b && a>b++);
//b++不执行 所以此时b=10
System.out.println(b);
//如果一个运算中,&&和||都有,那么&&优先级大于||
boolean flag = true || false && false;
System.out.println(flag);
}
}
3.2分支结构
3.2.1 if...else...
package day_03text;
public class Text6 {
/**
* 单分支语法 : 如果不符合条件,就不执行了
* if( 布尔型表达式 ){
* 为真执行的java代码;
* }
*
* 双分支语法 : 一定会有一个分支执行
* if(布尔型表达式){
* 为真执行的java代码;
* }else{
* 为假执行的java代码;
* }
*
* 多分支语法 : 如果以else 就肯定会执行一个分支,否则就有不执行情况
* 多分支 只会有一个分支执行,当某一个分支执行了,则整个多分支结构结束
* if(布尔型表达式){
* java代码;
* }else if(布尔型表达式){
* java代码;
* }else if(布尔型表达式){
* java代码;
* }.....
*/
public static void main(String[] args) {
int a = 1;
int b = 2;
// 这样写可能不执行
if (a > b) {
System.out.println("======");
}
// 肯定有一个执行
if (a>b) {
System.out.println(1111);
}else{
System.out.println(2222);
}
// 只会有一个执行
if(a <b){
System.out.println(333);
}else if (a <b) {
System.out.println(4444);
}else if (a <b) {
System.out.println(555);
}
System.out.println("-----------");
}
}
3.2.2 switch
package day_03text;
public class Text7 {
/**
* 语法 :
* java1.7之前 只能传入 int类型
* java1.7开始 还可以传入 String类型
* 能传入int, 也就意味着 可以传入 byte,short,char
* 只能判断相等!!!! 不能判断范围!!!!
* switch(数据){
* case 值 :
* 符合条件的代码;
* break;
* case 值:
* 符合条件的代码;
* break;
* default:
* 默认执行的代码;
* }
* 注意 : 每个case分支 一定要加 break , 否则会发生case穿透现象
* default 可以不加,如果不加 会有不执行的情况,就等于 if 没有加 else一样
*/
public static void main(String[] args) {
char c = 'A';
if (c == 'A') {
System.out.println("优秀");
} else if (c == 'B') {
System.out.println("良好");
} else if (c == 'C') {
System.out.println("一般");
} else {
System.out.println("差");
}
switch (c) {
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("一般");
break;
default:
System.out.println("差");
}
}
}
3.2.3case穿透
int i = 101;
// case穿透 所以 要注意 break
switch (i) {
default:
System.out.println(i);
case 1:
System.out.println(i+1);
case 2:
System.out.println(i+2);
case 10:
System.out.println(i+10);
// 由于没有break 不会结束分支执行,所以找到符合条件的开始,后面所有的分支都会执行
case 11:
System.out.println(i+11);
}
3.2.4case合并
package day_03text;
public class Text9 {
public static void main(String[] args) {
// case 合并 主要利用case穿透完成
char c = 'A';
// A,B,C 都是优秀
switch (c) {
case 'A':
case 'B':
case 'C':
System.out.println("优秀");
break;
case 'd':
System.out.println("一般");
break;
default:
System.out.println("差");
break;
}
}
}
例题
需求 : 给定人的年龄是 [1-100]
* 编写程序,通过人的年龄,来判断当前这个人处于生命的哪个阶段
* [1-5] : 幼儿
* [6-18] : 少年
* [19-35] : 青年
* [36-55] : 中年
* [56-100] : 老年
package day_03text;
import java.util.Scanner;
public class Age {
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
System.out.println("请输入您的年龄:");
double age = sr.nextDouble();
if( 1<=age && age <= 5){
System.out.println("幼年");
}else if( age <= 18 ){
System.out.println("少年");
}else if( age <= 35){
System.out.println("青年");
}else if( age <= 55){
System.out.println("中年");
}else if( age <=120){
System.out.println("老年");
}else
System.out.println("神仙");
}
}
需求 : 给定学生成绩,成绩可以带小数 [0-100] 编写程序 根据学生的成绩划分等级 [90-100] 优秀 [70-89] 良好 [60-69]
* 及格 [0-59] 不及格
*
* 使用switch完成 , 注意 switch不能传递double 只能传入 int和String
package day_03text;
public class Grade {
public static void main(String[] args) {
double score =99.6;
int grade =(int)score/10;
switch(grade){
case 10:
System.out.println("非常优秀");
break;
case 9:
System.out.println("优秀");
break;
case 8:
case 7:
System.out.println("良好");
break;
case 6:
System.out.println("及格");
break;
default:
System.out.println("不及格");
}
}
}
3.3循环结构
重复做某一件事
3.3.1for
3.3.1.1循环使用
package day_03text;
public class Text10 {
/**
* 循环结构 : 重复做某一件事
* 循环三要素 : 初始值,终止条件,步长
* 语法 :
* for( 表达式1 ; 表达式2 ; 表达式3 ){
* 循环体,就是重复做的事;
* }
* 表达式1 : 最先执行,并且只执行一次,所以适合做初始化操作
* 表达式2 : 必须是布尔型表达式,返回true/false
* 表达式3 : 每次循环都会执行,所以适合做步长操作
* 执行过程 :
* 循环开始执行,先执行表达式1,并且只执行一次,然后执行表达式2,此时如果表达式2返回false,则循环终止
* 如果表达式2返回true,则执行 循环体, 然后执行表达式3,再次执行表达式2,
* 以此类推,一直到表达式2返回false,循环终止,否则就一直执行
*/
public static void main(String[] args) {
// 死循环
// for ( ; true ; ) {
// System.out.println(1);
// }
// // 提醒remove 因为永远也执行不到
// System.out.println(2222);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println("====");
// 0 ~ 9
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// i 只能在循环体中使用,外面用不到
// System.out.println(i);
// 所以 这里还可以是 i
for (int i = 0; i < 5; i++) {
}
// 想要使用循环中的这个j 必须把作用域提升出去才行
int j = 0 ;
for ( ; j < 5; j++) {
System.out.println("j="+j);
}
// 5
System.out.println(j);
}
}
3.3.1.2嵌套循环使用
package day_03text;
public class Text11 {
/**
* 嵌套循环 : 循环体中还有一个循环
* 可以把双嵌套循环 模拟二维平面表
* 外层循环表示行数 , 内层循环代表 每行的列数
* 外层循环执行一次,内层循环执行一圈
*/
public static void main(String[] args) {
// i=0 , j = 0 , j = 1, j=2 , j=3,j=4
// i=1 , j = 0 , j = 1, j=2 , j=3,j=4
// i=2 , j = 0 , j = 1, j=2 , j=3,j=4
// i=3 , j = 0 , j = 1, j=2 , j=3,j=4
// i=4 , j = 0 , j = 1, j=2 , j=3,j=4
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
// 没有ln 就不会换行
System.out.print(j+" ");
}
// 换行
System.out.println();
// xxxx
}
}
}
3.3.1.3九九乘法表
package day_03text;
public class Text12 {
public static void main(String[] args) {
// for (int i = 1; i < 10; i++) {
// for (int j = 1; j < 10; j++) {
// System.out.print(j+" ");
// }
// // 换行
// System.out.println();
// }
for (int i = 1; i < 10; i++) {
// i表示行, 所以小于等于 i 即可
for (int j = 1; j <= i; j++) {
System.out.print(j+"x"+i+"="+(j*i)+" ");
}
// 换行
System.out.println();
}
}
}