文章目录
程序基本结构
计算机中任何简单或复杂的程序都可以由顺序结构、**选择结构 **和 循环结构这三种基本结构组合而成。
顺序结构: 程序中的各个操作是按照它们在源代码中的排列顺序依次执行。
选择结构: 根据某个特定的条件进行判断后,选择其中一个分支执行。
循环结构: 反复执行某个或某些操作,直到条件为假时才停止循环。
顺序结构
- Java的基本结构就是顺序结构,除非特别指明,否则就按照由上到下的顺序一句一句的执行。
- 顺序结构是最简单的算法结构。
- 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个一次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
E.G.
// 顺序执行 输出 1、2、3 这就叫做从上到下执行的顺序结构
System.out.println(1);
System.out.println(2);
System.out.println(3);
选择结构
概念: 根据已知条件进行逻辑判断,满足条件后执行相应操作。
Java的选择结构使用选择语句来实现 : if 语句; switch case 语句;
1 选择结构 – if
特殊 if else 用法: 如果 if 或 else 中只有一条语句可以省略 { },但不建议省略
1.1 基本 if
//语法
if(布尔表达式){
//代码块
}
执行流程:
- 对布尔表达式进行判断。
- 结果为true,则先执行代码块,再执行后续代码。
- 结果为false,则跳过代码块,直接执行后续代码。
E.G.
import java.util.Scanner;
public class Demo3_11 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入java成绩");
int java = input.nextInt();
System.out.println("请输入html成绩");
int html = input.nextInt();
if (java>98&&html>80||java==100&&html>70){
System.out.println("奖励");
}
System.out.println("程序结束了");
}
}
1.2 if else
//语法
if(布尔表达式){
//代码块1
}else{
//代码块2
}
执行流程:
- 对布尔表达式进行判断。
- 结果为true,则先执行代码块1,再退出整个结构,执行后续代码。
- 结果为false,则先执行代码块2,再退出整个结构,执行后续代码。
E.G.
import java.util.Scanner;
public class Demo3_12 {
public static void main(String[] args) {
//如果是男生送名牌手表,否则送lv包包。
Scanner input = new Scanner(System.in);
System.out.println("请输入性别");
char gender = input.next().charAt(0);
if(gender=='男') {
System.out.println("送名牌手表");
} else {
System.out.println("送lv包包");
}
}
}
E.G.
import java.util.Scanner;
/*
如果体彩中了500万,我买车、买房、三亚旅游
要求控制台输入是否中奖
字符串等值判断使用equals()方法
*/
public class Demo3_13 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入是否中奖了?y/n");
String s = input.next();
if (s.equals("y")) {
System.out.println("买车、买房、三亚旅游");
} else {
System.out.println("回家种地");
}
System.out.println("程序结束了");
}
}
E.G.
import java.util.Scanner;
public class Demo3_14 {
public static void main(String[] args) {
/*
输入四位数字的会员号的百位数字等于产生的随机数字即为幸运会员,提示恭喜您中奖了,否则没中奖。
int random=(int)(Math.random()*10);
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入您的四位会员号");
int card = input.nextInt();
//获取百位数字
int hundred = card/100%10;
//随机产生 0~9 的数字
int random=(int)(Math.random()*10);
if (random == hundred) {
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,其他均不再执行,适用区间判断,但要保证条件顺序(从大到小、从小到大)。
E.G.
package StageOne.day04.demo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 某游戏对不同等级的积分的玩家赋予不同的荣誉称号,其对应关系如下:
* 积分>=10000分为钻石玩家
* 积分>=5000并且<10000为白金玩家
* 积分>=1000并且<5000为青铜玩家
* 积分<1000为普通玩家。
* 小编现在是有7200分,请在代码编辑器中完善代码,看一下小编是什么级别的玩家。
* @date 2023/12/22 9:07
*/
public class demo01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入小编的游戏积分");
int score = input.nextInt();
if (score>=10000){
System.out.println("钻石玩家");
} else if (score>=5000){
System.out.println("白金玩家");
} else if (score>=1000){
System.out.println("青铜玩家");
} else {
System.out.println("普通玩家");
}
System.out.println("程序结束了");
}
}
E.G.
package StageOne.day04.demo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 我想买车,买什么车决定于我在银行有多少存款
* 如果您的存款超过500万,就买保时捷
* 否则,如果我的存款超过100万,就买路虎
* 否则, 如果我的存款超过50万,就买宝马
* 否则, 如果我的存款超过10万,就买大众
* 否则, 如果我的存款10万以下 ,买捷安特
* @date 2023/12/22 9:13
*/
public class demo02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的存款(万元)");
int money = input.nextInt();
if (money>=500) {
System.out.println("买保时捷");
} else if (money>=100) {
System.out.println("买路虎");
} else if (money>=50) {
System.out.println("买宝马");
} else if (money>=10) {
System.out.println("买大众");
} else {
System.out.println("买雅迪电车");
}
System.out.println("程序结束了");
}
}
E.G.
package StageOne.day04.demo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 输入四个季节:如果春天,输出“春暖花开”,如果是夏天,输出“夏日炎炎”,
* 如果是秋天,则输出"秋高气爽",如果是冬天,则输出"安静祥和"。
* @date 2023/12/22 9:36
*/
public class demo04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入关键词");
String s = input.next();
if (s.equals("春天")) {
System.out.println("春暖花开");
} else if (s.equals("夏天")){
System.out.println("夏日炎炎");
} else if (s.equals("秋天")) {
System.out.println("秋高气爽");
} else if (s.equals("冬天")) {
System.out.println("安静祥和");
} else {
System.out.println("错误输入");
}
System.out.println("程序结束了");
}
}
1.4 嵌套 if
//语法
if(外层布尔表达式){
if(内层布尔表达式){
//内层代码块1
}else{
//内层代码块2
}
}else{
//外层代码块
}
执行流程:
- 当外层条件满足时,再判断内层条件。
注意:
- 一个选择结构中,可嵌套另一个选择结构。
- 嵌套格式正确的情况下,支持任意组合。
E.G.
package StageOne.day04.demo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 判断用户输入的性别,如果是女生,然后再输入年龄,如果年龄大于等于18则”送迪奥香水“,
* 否则“送笔记本”,如果是男生,”送iphone14”
* @date 2023/12/22 9:27
*/
public class demo03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入性别");
char gender = input.next().charAt(0);
if (gender == '女') {
System.out.println("请输入年龄");
int age = input.nextInt();
if (age>=18) {
System.out.println("送香水");
} else {
System.out.println("送笔记本");
}
} else {
System.out.println("送一部华为mate60pro");
}
System.out.println("程序结束了");
}
}
2 选择结构 – switch case
//语法
switch(变量 或 表达式){
case 值1:
逻辑代码1;
break;
case 值2:
逻辑代码2;
break;
case 值n:
逻辑代码n;
break;
default:
未满足时的逻辑代码;
break;
}
执行流程:switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
- 如果变量中的值等于值1,则执行逻辑代码1。
- 如果变量中的值等于值2,则执行逻辑代码2。
- 如果变量中的值等于值n,则执行逻辑代码n。
- 如果变量中的值没有匹配的case值时,执行default中的逻辑代码。
注意:
- 适用等值判断,类型byte、short、int、char、String(JDK7+)、枚举
- 如果省略break,执行完代码块后,不能退出switch,会出现case穿透
- case 值不能重复, 并无顺序要求
- default可以放在任何位置, 也可以省略, 推荐置于末尾
E.G.
package StageOne.day04.demo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 根据不同输入名次显示不同奖励。
* 第一名:奖励 iphone 14
* 第二名:奖励 小米电视
* 第三名: 奖励 自行车
* 否则:奖励 彩票
* @date 2023/12/22 10:09
*/
public class demo05 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名次");
int n = input.nextInt();
switch (n) {
case 1:
System.out.println("奖励一部华为mate60");
break;
case 2:
System.out.println("奖励一个机器键盘");
break;
case 3:
System.out.println("奖励一个U盘");
break;
default:
System.out.println("奖励一包纸");
}
System.out.println("程序结束了");
}
}
E.G.
package StageOne.day04.demo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 利用switch实现一个简单计算器操作。
* @date 2023/12/22 10:22
*/
public class demo06 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个整数");
int n1 = input.nextInt();
System.out.println("请输入第二个整数");
int n2 = input.nextInt();
System.out.println("请输入一个操作符");
char ope = input.next().charAt(0);
int result;
switch (ope) {
case '+':
result = n1 + n2;
System.out.println("执行结果为:" + result);
break;
case '-':
result = n1 - n2;
System.out.println("执行结果为:" + result);
break;
case '*':
result = n1 * n2;
System.out.println("执行结果为:" + result);
break;
case '/':
if (n2 == 0) {
System.out.println("除数不能为 0");
} else {
result = n1 / n2;
System.out.println("执行结果为:" + result);
}
break;
default:
System.out.println("不支持");
break;
}
System.out.println("程序执行完毕");
}
}
补充:当除数为零时的各个情况
- 当一个数 n / 0 时, 系统将会报出 java.lang.ArithmeticException: / by zero 的错误;
- 当一个数 n / 0.0 时, 若 n 为正数结果为 infinity , n 为 负数结果为 -infinity;
- 当 0.0 / 0.0 时, 结果为 NaN (Not A Number) 不是一个数字, 一个不确定的值, 一个无法预测的值
- 所以当判断 (NaN==NaN) 时, 结果会输出 false;
循环结构
生活中的循环:在单圈400米的跑道上完成10000米长跑,当跑完25圈时,满足条件,循环结束。
程序中的循环:在循环条件满足情况下,重复的执行一段逻辑代码。
Java中循环语句:1. while 循环 2. do/while 循环 3. for 循环
循环组成部分:
- 初始部分:对循环变量赋初值
- 循环条件:判断循环变量是否超出某个界限
- 循环操作:要循环执行的具体逻辑代码
- 更新变量:修改循环变量的值
注意:
-
循环有四部分组成。
-
被循环条件判断的变量,才是初始部分和更新部分!
1 循环结构 – while 循环
//语法
while(布尔表达式){
//逻辑代码(循环操作)
}
执行流程:
- 先对布尔表达式进行判断,结果为true,则执行逻辑代码。
- 本次执行完毕后,再次进行判断,结果仍旧为true,则再次执行逻辑代码。
- 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
E.G.
while 循环的特点: 首次即有入口条件,先判断、再执行,适用于循环次数明确的情况。
package StageOne.day04.whiledemo;
/**
* @author 胡昊龙
* @version 1.0
* @description: 计算 1 + 2 + 3 + 4 + 5 ... + 98 + 99 + 100 的总和。
* @date 2023/12/22 14:10
*/
public class demo01 {
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i <= 100) {
sum = sum + i;
i++;
}
System.out.println("1~100的和为:" + sum);
}
}
E.G.
package StageOne.day04.whiledemo;
/**
* @author 胡昊龙
* @version 1.0
* @description: 计算 1 ~ 100 之间,所有偶数的和。
* @date 2023/12/22 14:21
*/
public class demo02 {
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i<=100){
if (i%2==0) {
sum = sum + i;
}
i++;
}
System.out.println("1 ~ 100 之间,所有偶数的和为" + sum);
}
}
E.G.
package StageOne.day04.whiledemo;
/**
* @author 胡昊龙
* @version 1.0
* @description: 计算10的阶乘 1*2*3*……*10;
* @date 2023/12/22 14:24
*/
public class demo03 {
public static void main(String[] args) {
int i = 1;
int fac = 1;
while (i <= 10) {
fac *= i;
i++;
}
System.out.println("10的阶乘是:" + fac);
}
}
2 循环结构 – do while 循环
//语法
do{
逻辑代码(循环操作)
}while(布尔表达式);
执行流程:
- 先执行一次循环操作之后,再进行布尔表达式的判断。
- 如果结果为true,则再次执行循环操作。
- 如果结果为false,才会退出循环结构,执行后续代码。
E.G.
do while 循环的特点: 首次没有入口条件,先执行,再判断,循环操作至少执行一次,适用于循环次数不明确的情况
package StageOne.day04.whiledemo;
/**
* @author 胡昊龙
* @version 1.0
* @description: 使用 do while 输出 100 次 HelloWorld
* @date 2023/12/22 14:56
*/
public class demo05 {
public static void main(String[] args) {
int i = 1;
do {
System.out.println("第"+i+"次 HelloWorld");
i++;
} while (i<=100);
System.out.println("程序结束了");
}
}
E.G.
package StageOne.day04.whiledemo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 检查学生作业完成情况,输入教师评语,决定学生是否需要抄写代码。
* @date 2023/12/22 14:48
*/
public class demo04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
char answer;
do {
System.out.println("学员开始抄写作业代码");
System.out.println("请输入是否合格了?(y/n)");
answer = input.next().charAt(0);
}while (answer!='y');
System.out.println("恭喜通过!");
}
}
3 循环结构 – for 循环
//语法
for(初始部分 ; 循环条件 ; 更新变量){
//逻辑代码(循环操作)
}
执行流程:
- 首次执行初始部分(仅一次)。
- 对布尔表达式进行判断,结果为true,则执行逻辑代码。
- 本次执行完毕后,执行更新变量,再次判断,结果仍旧为true,则再次执行逻辑代码。
- 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
E.G.
特点:首次有入口条件,先判断、再执行,适用于循环次数明确的情况。
package StageOne.day04.circulationDemo;
/**
* @author 胡昊龙
* @version 1.0
* @description: 使用 for 打印100遍“HelloWorld”
* @date 2023/12/22 15:22
*/
public class demo07 {
public static void main(String[] args) {
for (int i=1;i<=100;i++) {
System.out.println("第"+i+"次 HelloWorld");
}
}
}
E.G.
package StageOne.day04.circulationDemo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 控制台输入整数n,计算n的阶乘(!n)。例:1 * 2 * 3 ... * n
* @date 2023/12/22 15:26
*/
public class ForDemo01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字");
int n = input.nextInt();
int fac = 1; //阶乘
for (int i=1; i<=n; i++) {
fac *= i;
}
System.out.println(n+"的阶乘是"+fac);
}
}
E.G.
package StageOne.day04.circulationDemo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 现有1个班级的5名同学,请通过控制台输入5名同学的分数,并计算总分和平均分
* @date 2023/12/22 15:26
*/
public class forDemo02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sum = 0; //成绩总和
for (int i=1;i<=5;i++) {
System.out.println("请输入第"+i+"个同学的成绩");
int score = input.nextInt();
sum += score;
}
int avg = sum / 5;
System.out.println("总分是:"+sum+"平均分是"+avg);
}
}
E.G.
package StageOne.day04.circulationDemo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 输出加法表,输入一个数字,比如6
* 0+6=6
* 1+5=6
* ...
* 6+0=6
* @date 2023/12/22 15:27
*/
public class forDemo03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字");
int k = input.nextInt();
for (int i=0,j=k; i<=k; i++,j--) {
System.out.println(i+"+"+j+"="+k);
}
}
}
for 循环特殊形式
-
特殊形式1:省略循环条件,出现死循环。
//死循环 for(int i=0; ; i++){ //循环内容 }
-
特殊形式2:省略更新部分,出现死循环。
//死循环 for(int i=0; i<=10;){ //循环内容 }
-
特殊形式3:初始部分、循环条件、更新部分都省略,出现死循环。
//死循环 for(; ;){ //循环内容 }
while、do while、for比较
语法不同:
- while(循环条件){…}
- do{…}while(循环条件);
- for(初始部分;循环条件;更新变量){…}
执行顺序:
- while和for是先判断条件 ,然后再执行循环操作。
- do while是先执行循环操作,再判断条件;循环操作至少执行一次。
使用场合:
- 循环次数确定时优先选用while、for循环。
- 循环次数不确定优先选用do while循环。
补充
变量的分类
通过变量的作用范围, 变量可分为两类: 局部变量以及成员变量
1 局部变量
- 概念:声明在方法内部的变量,必须先赋值再使用。
- 作用范围:定义行开始到所在的代码块结束。
- 注意:多个变量,在重合的作用范围内,不能出现重名。
2 成员变量 [后续讲解]
- 概念:声明在方法外部,类内部的变量,有默认值。
- 作用范围:整个类内部使用。
- 注意:不能和成员变量同名,可以和局部变量同名;如果和局部变量同名,局部变量优先级高。
E.G.
public class demo07 {
//定义成员变量
static int count = 10000;
public static void main(String[] args) {
//局部变量
int n = 100;
System.out.println(n);
if (n>=100) {
int age = 20;
System.out.println(age);
System.out.println(n);
}
int age = 30;
System.out.println(age);
System.out.println(n);
System.out.println("============================");
System.out.println(count);
//局部变量
int count = 30000;
System.out.println(count);
}
}
跳转语句
Java 使用两个关键字实现程序的跳转: 1 break 关键字 2 continue 关键字
break 关键字
- break 主要用在循环语句或者 switch 语句中,用来跳出整个循环语句块。
- break 跳出最里层的循环,并且继续执行该循环下面的语句。
//语法: break 的用法很简单,就是循环结构中的一条语句:
break;
E.G.
public class Test {
public static void main(String[] args) {
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ) {
// x 等于 30 时跳出循环
if( x == 30 ) {
break;
}
System.out.print( x );
System.out.print("\n");
}
}
}
以上实例编译运行结果如下:
10
20
E.G.
package StageOne.day04.circulationDemo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 小张参加长跑比赛5000米,一共10圈,
* 如果小张坚持不下来,可以中途退出比赛,使用程序描述这个场景?
* @date 2023/12/22 16:31
*/
public class breakDemo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int count = 0;
char answer;
do {
count++;
System.out.println("小张开始跑第"+count+"圈");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
System.out.println("小张跑完了第"+count+"圈");
//判断是否跑完全部的10圈
if (count<10){
System.out.println("是否还能坚持?(y/n)");
answer = input.next().charAt(0);
if (answer == 'n') {
break;//跳出
}
}
}while (count<10);
System.out.println("比赛结束了, 小张共跑了"+count+"圈");
}
}
continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
- 在 for 循环中,continue 语句使程序立即跳转到更新语句。
- 在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
// **语法**:continue 就是循环体中一条简单的语句:
continue;
E.G.
public class Test {
public static void main(String[] args) {
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ) {
if( x == 30 ) {
continue;
}
System.out.print( x );
System.out.print("\n");
}
}
}
以上实例编译运行结果如下:
10
20
40
50
E.G.
package StageOne.day04.circulationDemo;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 小张参加长跑比赛5000米,一共10圈,
* 如果小张口渴了,可喝水完继续跑,使用程序描述这个场景?
* @date 2023/12/22 16:47
*/
public class continueDemo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int count = 0;
char answer;
do {
count++;
System.out.println("小张开始跑第"+count+"圈");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
System.out.println("小张跑完了第"+count+"圈");
if (count<10){
System.out.println("是否口渴了?(y/n)");
answer = input.next().charAt(0);
if (answer == 'n') {
continue;//继续
}
System.out.println("~~~~~~~~喝口水~~~~休息一下~~~~~~~~");
}
}while (count<10);
System.out.println("比赛结束了, 小张共跑了"+count+"圈");
}
}
E.G.
package StageOne.day04.circulationDemo;
/**
* @author 胡昊龙
* @version 1.0
* @description: 喝酒令:输出1-100,遇到7的倍数或包含7的数字跳过去。
* 提示 n%7==0 、n%10==7 、 n/10==7
* @date 2023/12/22 16:56
*/
public class continueDemo02 {
public static void main(String[] args) {
for (int i=1; i<=100; i++){
if (i%7==0 || i%10==7 || i/10==7) {
continue;//继续
}
System.out.println(i);
}
}
}