1.顺序结构
顺序结构就是按代码书写的顺序一行一行的执行。
System.out.println("我最棒!"); System.out.println("我一定可以!"); System.out.println("加油加油!"); //运行结果即为 //我最棒! //我一定可以! //加油加油!
2.分支结构
2.1if语句
1.语法格式1
if(布尔表达式){
语句
}
如果布尔表达式为true,执行if中的语句,否则不执行。
比如:如果小明高数不挂科,就请兄弟们吃饭.
int score = 61; if(score >= 60) { System.out.println("请兄弟们吃饭!!!"); }
2.语法格式2
if(布尔表达式){
语句1
}else{
语句2
}
如果布尔表达式为true则执行语句1,否则执行语句2
比如:如果小明高数不挂科,就请兄弟们吃饭,否则兄弟们请小明和糯香柠檬茶
int score = 59; if(score >= 60) { System.out.println("请兄弟们吃饭!!!"); }else{ System.out.println("兄弟们请小明喝糯香柠檬茶!!!!"); } }
3.语法格式3
if(布尔表达式1){
语句1
}else if(布尔表达式2){
语句2
}else{
语句3
}
表达式1成立,执行语句1,表达式2成立,执行语句2,表达式1,2都不成立的话执行语句3.
比如:考虑到学生自尊,不公开分数排名,因此:
分数在 [60, 70) 之间的,为及格
分数在 [0, 60) 之间的,为不及格
其余都是错误数据
int score = 91; if (score >= 90) { System.out.println("优秀"); } else if (score >= 80 && score < 90) {i System.out.println("良好"); } else if (score >= 70 && score < 80) { System.out.println("中等"); } else if (score >= 60 && score < 70) { System.out.println("及格"); } else if (score >= 0 && score < 60) { System.out.println("不及格"); } else { System.out.println("错误数据"); }
练习:判断一个年份是否是闰年
int year = 2024; if(year % 4 == 0 && year % 100 != 0) { System.out.println(year + "是闰年"); }else if(year % 400 == 0) { System.out.println(year + "是闰年"); }else{ System.out.println(year + "不是闰年"); }
悬垂else问题
int x = 10; int y = 10; if(x == 10) if(y == 10) System.out.println("abc"); else System.out.println("cba");
if/else语句中可以不加大括号,此时只能写一条语句,且else与最接近的if匹配.实际开发中建议不要这样写,统一加上大括号.
2.2switch语句
switch(表达式){
case 常量值1:{
语句1;
break;
}
case 常量值2:{
语句2;
break;
}
default:{
内容都不满足时执行语句;
break;
}
}
执行流程:
1.先计算表达式的值.
2.和case依次,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束.
3.当表达式的值没有与所列项匹配时,执行default中的语句.
代码示例:根据day的值输出星期
int day = 7; switch(day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("输入有误"); break;
注意:
1.多个case后的常量值不可以重复
2.switch的括号内只能是以下类型的表达式:
基本类型: byte,char,short,int.
引用类型:String常量串,枚举类型
3.break 不要遗漏, 否则会失去 "多分支选择" 的效果.
int day = 1; switch(day) { case 1: System.out.println("星期一"); // break; case 2: System.out.println("星期二"); break; }
3.switch不能表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. int num = 15; if (num > 10 && num < 20) { System.out.println("hehe"); } }
3.循环结构
3.1while循环
基本语法格式:
while(循环条件){
循环语句;
}
若循环条件为ture,则执行循环语句,否则结束循环.
代码示例1:打印1-10数字
int i = 1; while(i<=10) { System.out.println(i); i++; }
代码示例2:计算1-100的和
int i = 1; int sum = 0; while(i<=100) { sum += i; i++; } System.out.println(sum);
代码示例3:计算5的阶乘
int i = 1; int sum = 1; while(i <= 5) { sum *= i; i++; } System.out.println(sum); }
代码示例4:计算1! + 2! + ... + 5!
int i = 1; int j = 1; int tmp = 1; int sum = 0; while(j <= 5){ while(i <= j) { tmp *= i; i++; } sum += tmp; j++; } System.out.println(sum);
3.2break
int num = 100; while(num <= 200){ if(num % 3 == 0) { System.out.println("第一个三的倍数为:" + num); break; } num++; }
3.3continue
int num = 100; while (num <= 200) { if (num % 3 != 0) { num++; // 这里的 ++ 不要忘记! 否则会死循环. continue; } System.out.println("找到了 3 的倍数, 为:" + num); num++; }
3.4 for循环
基本语法
for(表达式①;布尔表达式②;表达式③){
表达式④;
}
for (int i = 1; i <= 10; i++) { System.out.println(i); }
2.计算1-100的和
int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println("sum = " + sum); // 执行结果 //5050
3.计算5的阶乘
int result = 1; for (int i = 1; i <= 5; i++) { result *= i; } System.out.println("result = " + result);
int sum = 0; for (int i = 1; i <= 5; i++) { int tmp = 1; for (int j = 1; j <= i; j++) { tmp *= j; } sum += tmp; } System.out.println("sum = " + sum);
注意:
4.输入输出
4.1输出到控制台
基本语法
System.out.println("abc"); // 输出一个字符串, 带换行 System.out.print("sdf"); // 输出一个字符串, 不带换行 System.out.printf(format, msg); // 格式化输出
4.2从键盘输入
Scanner sc = new Scanner(System.in); System.out.println("请输入你的姓名:"); String name = sc.nextLine(); System.out.println("请输入你的年龄:"); int age = sc.nextInt(); System.out.println("请输入你的工资:"); float salary = sc.nextFloat(); System.out.println("你的信息如下:"); System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary); sc.close(); // 注意, 要记得调用关闭方法
注意:
当我将上述代码写成以下形式:
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的姓名:");
String name = sc.nextLine();//自动读取回车
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close();
此时会发现String name = sc.nextLine();会自动读取回车,导致姓名无法从键盘录入,即:
这时我们只需在String name = sc.nextLine();的上一行写上sc.nextLine();即可不让String name = sc.nextLine();读取回车,解决这个问题.
使用Scanner循环读取N个数字,并求取其平均值.
Scanner sc = new Scanner(System.in); int sum = 0; int num = 0; while (sc.hasNextInt()) { //sc.hasNextInt()表示不断读取下一个数,此处只需了解其意思即可,后面再详细介绍 int tmp = sc.nextInt(); sum += tmp; num++; } //按ctrl+d结束循环 System.out.println("sum = " + sum); System.out.println("avg = " + sum / num); sc.close();
5. 猜数字游戏
Random random = new Random(); // 默认随机种子是系统时间 Scanner sc = new Scanner(System.in); int toGuess = random.nextInt(100); while (true) { System.out.println("请输入要输入的数字: (1-100)"); int num = sc.nextInt(); if (num < toGuess) { System.out.println("低了"); } else if (num > toGuess) { System.out.println("高了"); } else { System.out.println("猜对了"); break; } } sc.close();