目录
1.分支结构
1.1基本if结构
if(boolean表达式){
//代码块
}
后续代码...
对布尔表达式进行判断。
结构为true,则执行代码块1,后执行后续代码。
结为false,则跳过代码块1,直接执行后续代码。
package learn01.test1;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 9:40
* 需求:根据用户输入的成绩判断是否获得奖励
*
* 如果
*
* Java成绩大于90 并且 数据库成绩大于85
*
* 或者
*
* javaScript成绩等于100 并且 Java成绩大于80
*
* 可以获得奖励
*
*
*/
public class TestInputScore {
public static void main(String[] args) {
Scanner input = new Scanner(System.in); // 在Scanner末尾alt + Enter导包
System.out.println("请输入Java成绩");
double javaScore = input.nextDouble();
System.out.println("请输入数据库成绩");
double dbScore = input.nextDouble();
System.out.println("请输入JS成绩");
double jsScore = input.nextDouble();
if( (javaScore > 90 && dbScore > 85) || (jsScore == 100 && javaScore > 80)){
System.out.println("恭喜你,获得奖励");
}
System.out.println("程序结束");
}
}
1.2 if-else结构
if(boolean表达式){
//代码块1
}else{
//代码块2
}
后续代码...
对boolean表达式进行判断。
结果为true,则先执行代码块1,后退出整个结构,执行后续代码。
结果为false,则先执行代码块2,后退出整个结构,执行后续代码。
package learn01.test2;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 9:35
* 需求: 使用if-else结构判断用户输入的年龄是否成年
* 在使用idea的过程中 : 哪里报错点哪里
*/
public class TestInputAge {
public static void main(String[] args) {
Scanner input = new Scanner(System.in); // 鼠标移动到Scanner 选择import class 导包
System.out.println("请输入您的年龄");
int age = input.nextInt();
if(age >= 18){
System.out.println("恭喜你,成年了");
}else{
System.out.println("很遗憾,未成年");
}
System.out.println("程序结束");
}
}
1.3多重if
if(布尔表达式1){
//代码块1
}else if(布尔表达式2){
//代码块2
}else if(布尔表达式3){
//代码块3
}else{
//代码块4
}
表达式1为true,则执行代码块1,再退出整个结构。
表达式2为true,则执行代码块2,再退出整个结构。
表达式3为true,则执行代码块3,再退出整个结构。
以上均为false,则执行代码块4,再退出整个结构。
注意:相互排斥,有一个为true,其他均不再执行, 适用于区间判断。
package learn01.test3;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 10:42
* 使用多重if根据比赛名次分配奖励
* 第一名 获得夏令营三天
* 第二名 奖励苹果14袋
* 第三名 奖励笔记本一本
* 第四名 口头表扬一次
*
* 以上需求也属于多种情况 所以可以使用多重if实现
* 但是注意:以上的条件每种情况属于独立存在的 不属于区间情况 所以对条件的顺序没有要求
*/
public class TestManyIfNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名次");
int number = input.nextInt();
if(number == 1){
System.out.println("夏令营三天");
}else if(number == 3){
System.out.println("奖励笔记本一本");
}else if(number == 4){
System.out.println("口头表扬一次");
}else if(number == 2){
System.out.println("奖励苹果14袋");
}else{
System.out.println("只有前4名有奖励");
}
System.out.println("程序结束");
}
}
1.4嵌套if
if(外层表达式){
if(内层表达式){
//内层代码块1
}else{
//内层代码块2
}else{
//外层代码块
}
当外层条件满足时,再判断内层条件。
一个选择结构中,可嵌套另一个选择结构。 嵌套格式正确的
情况下,支持任意组合。
package learn01.test4;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 11:17
* 嵌套if 一个完整的if结构中再嵌套另外的if结构
*
* 需求: 学校举行百米跑步比赛 如果时间小于13秒则可以进入决赛 然后再根据性别进行男子 女子 分组
*
* 改进:
* 1.如果时间不满足 则不必输入性别了 可以直接淘汰
* 2.对性别进行准确的判断 如果输入的不是男 或者 女 则进行对应提示
*
*/
public class TestInnerIf {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的跑步时间");
double time = input.nextDouble();
if(time < 13){
System.out.println("请输入你的性别");
String sex = input.next();
// 可以进入决赛
// 判断字符串 必须使用equals方法 equals属于String类提供的一个专门用于判断的字串的方法
// 格式 : 字符串变量名称.equals("判断的内容") 如果内容相同 结果为true 内容不同 结果为false
// 不要使用==比较字符串 后续讲解原因
if(sex.equals("男")){
System.out.println("恭喜你,进入男子组决赛");
}else if(sex.equals("女")){
System.out.println("恭喜你,进入女子组决赛");
}else{
System.out.println("暂不支持第三性别");
}
}else{
System.out.println("被淘汰了");
}
System.out.println("程序结束");
}
}
1.5 swtich结构
switch(变量|表达式){
case 值1:
逻辑代码1;
case 值2:
逻辑代码2;
case 值n:
逻辑代码n;
default:
未满足时的逻辑代码;
}
可判断的类型: byte、short、int、char、String(JDK7+)
执行流程: 如果变量中的值等于值1,则执行逻辑代码1。 如果变量中的值等于值2,则执行逻辑代码2。 如果变量中的值等于值n,则执行逻辑代码n。 如果变量中的值没有匹配的case值时,执行default中的逻辑代码。
注意:所有case的取值不可相同。
case穿透:这是一种switch的正常现象 前边的case满足以后会继续向下执行
如需每个case都是相互独立 必须在case代码块之后加上break
break关键字:单词含义:打破 折断 用在switch中表示跳出/退出 switch结构
default: 表示没有匹配指定case的其他任何情况 如果需要每个case都相互独立 也要在default
之后加上break 可以提高代码的阅读性
注意:default位置不固定 通常写在最后
package learn01.test5;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 14:23
* 使用switch根据比赛名次分配奖励
* 第一名 获得夏令营三天
* 第二名 获得夏令营三天
* 第三名 奖励笔记本一本
* 第四名 口头表扬一次
*/
public class TestSwitchNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名次");
int number = input.nextInt();
switch(number){
case 1:
case 2:
System.out.println("奖励夏令营三天");
break;
case 3:
System.out.println("奖励笔记本一本");
break;
case 4:
System.out.println("奖励口头表扬一次");
break;
default:
System.out.println("继续努力");
break;
}
System.out.println("程序结束");
}
}
1.6 多重if和switch区别
多重if适用于某个值处于连续的区间的情况 比如 0~60 60~70 ……
switch适用于某个值属于固定等值的情况 比如 1、2、3、4
如果处理固定等值情况,switch更加简
2.循环结构
2.1 while循环
计数器初始化;
while ( 判断条件 ) {
循环体; 计数器变化;
}
三种循环都有四个必不可少的部分
1.计数器初始化
2.判断条件
3.循环体
4.计数器变化
while循环可以用户处理循环次数确定的情况
while循环也可以实现循环次数不确定的情况
通常用于处理循环次数不确定的情况
因为循环次数确定的情况 for循环更简洁
package learn01.test6;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 15:33
* 三种循环都有四个必不可少的部分
* 1.计数器初始化
* 2.判断条件
* 3.循环体
* 4.计数器变化
*
* while循环
* while : 当……
* 需求:使用while循环打印100次好好学习
* while循环可以用户处理循环次数确定的情况
*
*/
public class TestWhilePrint {
public static void main(String[] args) {
int i = 1;
while(i <= 10000){
System.out.println("第" + i++ + "次好好学习");
i++;
}
System.out.println(i);
System.out.println("程序结束");
}
}
2.2 do-while循环
计数器初始化;
do {
循环操作;
计数器变化;
} while ( 循环条件 );
do-while循环用于处理循环次数不确定的情况
do-while也可以处理循环次数确定的情况
通常用来处理循环次数不确定的情况
因为循环次数确定的情况 for循环更加简洁
while和do-while的区别?
while循环先判断后执行 条件不成立 一次都不执行
do-while先执行后判断 不管条件是否成立 至少执行一次
这两种循环都用于处理循环次数不确定的情况
package learn01.test7;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 16:22
* 使用do-while打印100次好好学习
* do-while也可以处理循环次数确定的情况
* 通常用来处理循环次数不确定的情况 因为循环次数确定的情况 for循环更加简洁
*
* while和do-while的区别?
* while循环先判断后执行 条件不成立 一次都不执行
* do-while先执行后判断 不管条件是否成立 至少执行一次
* 这两种循环都用于处理循环次数不确定的情况
*
*/
public class TestDoWhilePrint {
public static void main(String[] args) {
int i = 1;
do{
System.out.println("第" + i + "次好好学习");
i++;
}while(i <= 100);
System.out.println("程序结束");
}
}
2.3 for循环
for(int i=0;i<100;i++){
System.out.println("好好学习!");
}
for循环用于处理循环次数确定的情况
注意for循环的执行顺序
第一轮:
1.先执行计数器初始化 且只执行一次
2.执行判断条件
3.执行循环体
4.执行计数器变化
第二轮:
直接从第二步开始
package learn.test8;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/1 16:33
* 循环输入某同学结业考试的5门课成绩,并计算平均分
*/
public class TestInputScore {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名字");
String name = input.next();
double sum = 0;
for(int i = 1;i <= 5;i++){
System.out.println("请输入" + name + "同学的第" + i + "门成绩");
double score = input.nextDouble();
sum = sum + score; // sum+=score;
}
System.out.println(name + "的总分是" + sum + ",平均分是:" + sum / 5);
}
}
3.流程控制关键字
3.1 break关键字
break:可以用于switch或者循环中,分别表示跳出switch结构 或者跳出循环结构(中断循环)
未执行完的循环次数不再执行
break用于循环中,通常要结合分支判断语句一起使用
package learn01.test2;
/**
* @author CQL
* @description TODO
* @date 2023/4/3 9:37
* 1~10之间的整数相加,得到累加值大于20的当前数
*/
public class TestNumberSum {
public static void main(String[] args) {
int sum = 0;
for(int i =1;i <= 10;i++){
sum += i;
if(sum > 20){
System.out.println(sum + "----" + i);
break;
}
}
System.out.println(sum);
}
}
3.2 continue关键字
continue:继续,只能用于循环中 表示跳出本次循环 继续执行下一次循环
continue通常也有要结合判断语句使用
package learn01.test3;
import java.util.Scanner;
/**
* @author CQL
* @description TODO
* @date 2023/4/3 10:25
* 循环录入Java课的学生成绩,统计分数大于等于80分的学生比例
* 分析:编写循环实现成绩录入 在录入过程中对成绩判断 如果大于等于80 那么符合条件总数累计加1
* 否则不进行累计
*
* 进行算数运算时:
* 两个操作数有一个为double,计算结果提升为double。
* 如果操作数中没有double,有一个为float,计算结果提升为float。
* 如果操作数中没有float,有一个为long,计算结果提升为long。
* 如果操作数中没有long,有一个为int,计算结果提升为int。
* 如果操作数中没有int,均为short或byte或者char,计算结果仍旧提升为int。
*
* 特殊:任何类型与String相加(+)时,实为拼接,其结果为String。
*/
public class TestInputScore {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入班级总人数");
int count = input.nextInt();
double sum = 0; // 用于统计大于等80分的总人数
for(int i = 1;i <= count;i++){
System.out.println("请输入第" + i + "个人的成绩");
double score = input.nextDouble();
if(score < 80){ // 这里不是必须使用continue 如果判断大于等于80分再累计也可以实现
continue;
}
sum++;
}
System.out.println("大于等于80分的人数占比为:" + sum / count * 100 + "%");
}
}
4.多重循环
多重循环运行规律:
外层循环变量变化一次 内层循环变量变化一轮
多重循环打印图案规律:
1.外层循环控制行数
2.内层循环控制列数
4.1 打印矩形、平行四边形
public class TestPrintSquare {
public static void main(String[] args) {
for(int i = 1;i <= 5;i++){
System.out.println("*****");
}
System.out.println("-----------------------------------------");
for(int j = 1;j <= 6;j++){
for(int i = 1;i <= 8;i++){
System.out.print("*");
}
System.out.println();
}
}
}
public class TestPrintParallelogram {
public static void main(String[] args) {
for(int i = 1;i <= 5;i++){
// 左半部分
for(int j = 5;j >= i ;j--){
System.out.print("&");//挤压变形
}
// 右半部分
for(int j = 1;j <= 5;j++){
System.out.print("*");
}
System.out.println();
}
}
}
4.2 打印三角形
多重循环打印三角形规律:
第一行元素的个数决定了计数器的初始值
如果随着每行元素越来越多 计数器就跟着++ 此时判断条件应该设置一个上限,应该小于或小于等于某个值
如果随着每行元素越来越少 计数器就随之- - 此时的判断条件应该设置一个下限,最后计数器应该大于或大于等于某个值
/**
* @author CQL
* @description TODO
* @date 2023/4/3 15:17
* 使用多重循环打印正三角形
*/
public class TestPrintTriangle {
public static void main(String[] args) {
for(int i = 1;i <=5;i++){
// 左半部分
for(int j = 5;j >= i;j--){
System.out.print(" ");
}
// 右半部分 每一行元素的个数为:行号/数 * 2 - 1
for(int j = 1;j <= 2 * i -1 ;j++){
System.out.print("*");
}
// 换行
System.out.println();
}
}
}