选择结构和循环结构
1. 变量的命名规范
字下美人数骆驼:可以以字母、下划线、美元符号、人民币符号开头,可以包含数字,不能以数字开头,驼峰命名,见名知义有意义 举例:studentAgeAndName
字:字母
下:下划线
美:美元符号
人:人民币符号
数:数字
骆驼:驼峰命名
/**
* @author WHD
* @description TODO
* @date 2022/9/3 9:26
*
* 变量的命名规范:字下美人数骆驼:可以以字母、下划线、美元符号、人民币符号开头,
* 可以包含数字,不能以数字开头,
* 驼峰命名,见名知义有意义 举例:studentAgeAndName
*
* 实际开发中 变量的名称要求统一使用单词 不能使用下划线 美元符号 人民币等特殊符号
*/
public class Test1 {
public static void main(String [] args){
int a = 10;
System.out.println(a);
int _b = 33;
System.out.println(_b);
int $c = 66; // $:英文模式下 shift + 4
System.out.println($c);
int ¥d = 77; //¥:中文模式下 shift + 4
System.out.println(¥d);
System.out.println("--------------------------------------");
int e1 = 5645;
System.out.println(e1);
int a1b2 = 2356;
System.out.println(a1b2);
System.out.println("--------------------------------------");
int a3d = 66;
System.out.println(a3d);
String studentName = "赵四";
String sn = "赵四";
}
}
2. 包的概念
什么是包?
包是用于管理Java文件以及class文件的文件夹
包的命名规范:全部小写,域名倒置,不能以点开头或者结尾,可以包含点,每存在一个点,表示一个子文件夹
www.baidu.com --> com.baidu.xxxx(具体包名)
包中的java文件 必须在第一行 使用package关键字声明此类所在包
package com.atguigu.test1; // 包的声明 表示此java文件位于此包中,包的声明永远在java文件的第一句
public class Test1 {
public static void main(String[] args) {
System.out.println("hello package");
}
}
3. Scanner工具类
Scanner 单词:扫描
Scanner类的作用:可以用于接收用户输入的信息 此类位于java.util这个包中 如果我们需要使用此类 必须使用import关键字导包
只要当前java文件 与我们使用类 不再同一个包 就必须导包
此类提供了如下功能 分别用于接收不同类型的数据
next() 接收字符串
nextInt() 接收int类型整数
nextDouble() 接收double类型浮点数
nextBoolean() 接收boolean类型数据
使用对应的功能接收对应类型的数据 如果类型不符合 将报异常
InputMismatchException
将中断程序注意:没有nextChar()
package com.atguigu.test2;
import java.util.Scanner;
/**
* Scanner 类的使用 必须使用import导包 导包语句书写在类声明之前 包声明之后
* java.util.Scanner 用于接收用户输入的信息
* 此类提供了如下功能 分别用于接收不同类型的数据
* next() 接收字符串
* nextInt() 接收int类型整数
* nextDouble() 接收double类型浮点数
* nextBoolean() 接收boolean类型数据
*
* 使用对应的功能接收对应类型的数据 如果类型不符合 将报异常 InputMismatchException
*
* 注意:没有nextChar()
* */
public class Test1 {
public static void main(String[] args) {
// 第一步 创建一个Scanner类型的变量
Scanner input = new Scanner(System.in);
// 第二步 提示用户输入
System.out.print("请输入你的名字:");
// 第三步 接收用户输入信息 并且存放到名为 name的变量中
String name = input.next();
// 第四部 打印用户输入信息
System.out.println("您输入的名字为:" + name);
// 其他数据类型 重复以上第2,3,4步即可
System.out.print("请输入你的年龄:");
int age = input.nextInt();
System.out.println("您输入的年龄为:" + age);
System.out.print("请输入你的身高:");
double height = input.nextDouble();
System.out.println("你输入的身高是:" + height);
System.out.print("请输入你是否是男生:");
boolean isBoy = input.nextBoolean();
System.out.println(isBoy == true ? "男生" : "女生");
// 布尔类型变量 在判断取值的时候 直接写书名 等同于 == true
System.out.println(isBoy ? "男生" : "女生");
}
}
4. 选择结构
4.1 if结构
语法:
if(布尔表达式){
//代码块1
}后续代码…
执行流程:
对布尔表达式进行判断。
结果为true,则先执行代码块1,再执行后续代码。
结果为false,则跳过代码块1,直接执行后续代码。
package com.atguigu.test3;
/**
* 根据变量判断大小关系是否成立
* */
public class Test1 {
public static void main(String[] args) {
int a = 20;
int b = 30;
if (a < b){
System.out.println("a大于b条件成立");
}
System.out.println("程序结束");
}
}
package com.atguigu.test3;
import java.util.Scanner;
/**
* 需求:根据用户输入的年龄 判断是否成年
* */
public class Test2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入您的年龄:");
int age = scan.nextInt();
if(age >= 18){
System.out.println("成年了");
}
System.out.println("程序结束");
}
}
4.2 if-else结构
语法:
if(布尔表达式){
//代码块1
}else{
//代码块2
}后续代码…
执行流程:
对布尔表达式进行判断。
结果为true,则先执行代码块1,再退出整个结构,执行后续代码。
结果为false,则先执行代码块2,再退出整个结构,执行后续代码。
else结构不能单独出现,目前必须结合if结构
package com.atguigu.test4;
/**
* 使用if-else结构 完善程序 每种情况都有信息打印
* */
public class Test1 {
public static void main(String[] args) {
int a = 40;
int b = 30;
if (a < b){
System.out.println("a小于b条件成立");
}else{
System.out.println("a小于b条件不成立");
}
System.out.println("程序结束");
}
}
package com.atguigu.test4;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的年龄:");
int age = input.nextInt();
if (age >= 18){
System.out.println("成年了");
}else{
System.out.println("未成年");
}
System.out.println("程序结束");
}
}
4.3 多重if
多重if 用来处理多重情况
else-if不能单独出现 必须结合if结构
else结构不能单独出现 必须结合 if 或者 else-if结构
else结构根据需求是否书写
多重if用于处理某个值处于连续区间的情况 使用多重if实现 条件必须是有序的
升序 或者 降序
package com.atguigu.test5;
import java.util.Scanner;
/**
* 多重if 用来处理多重情况
*
* else-if不能单独出现 必须结合if结构
* else结构不能单独出现 必须结合if或者多重if结构
* else结构根据需求是否书写
*
* 多重if用于处理某个值处于连续区间的情况 使用多重if实现 条件必须是有序的
* 升序或者降序
*
* 需求:根据用户输入的分数区间判断等级
* 0-59 不及格
* 60-70 中等
* 71-80 良好
* 81-90 优秀
* 91-100 很棒
*
* */
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的分数:");
int score = input.nextInt();
if(score >= 91 && score <= 100){
System.out.println("很棒");
}else if(score >= 81 && score <= 90){
System.out.println("优秀");
}else if(score >= 71 && score <= 80){
System.out.println("良好");
}else if(score >= 60 && score <= 70){
System.out.println("中等");
}else{
System.out.println("不合格");
}
System.out.println("程序结束");
}
}
package com.atguigu.test5;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的分数:");
int score = input.nextInt();
if(score >= 0 && score <= 100){
if(score >= 91 && score <= 100){
System.out.println("很棒");
}else if(score >= 81 && score <= 90){
System.out.println("优秀");
}else if(score >= 71 && score <= 80){
System.out.println("良好");
}else if(score >= 60 && score <= 70){
System.out.println("中等");
}else{
System.out.println("不合格");
}
}else{
System.out.println("输入分数有误!");
}
System.out.println("程序结束");
}
}
4.4 嵌套if
语法:
if(外层表达式){
if(内层表达式){
//内层代码块1
}else{
//内层代码块2
}
}else{
//外层代码块
}执行流程:
当外层条件满足时,再判断内层条件。注意:
一个选择结构中,可嵌套另一个选择结构。
嵌套格式正确的情况下,支持任意组合。判断字符串内容是否等于某个内容 不能使用==比较,必须使用equals方法,使用方式 sex.equals(“比较内容”)
package com.atguigu.test6;
import java.util.Scanner;
/**
* 嵌套if :一个完整的if结构中 嵌套另外一个if结构
*
* 需求:学校举行百米跑步比赛 跑步时间小于14秒 可以进入决赛 然后再根据性别 进行男子/女子 分组
* */
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的跑步时间:");
double time = input.nextDouble();
System.out.print("请输入您的性别:");
String sex = input.next();
if(time < 14){
System.out.println("恭喜你进入决赛");
// 接下来对性别判断 实现分组
// 判断字符串内容是否等于某个内容 不能使用==比较
// 必须使用equals方法
// 使用方式 sex.equals("比较内容")
if(sex.equals("男")){
System.out.println("恭喜你进入男子组");
}else{
System.out.println("恭喜你进入女子组");
}
}else{
System.out.println("继续加油");
}
System.out.println("程序结束");
}
}
package com.atguigu.test6;
import java.util.Scanner;
/**
* 嵌套if :一个完整的if结构中 嵌套另外一个if结构
* <p>
* 需求:学校举行百米跑步比赛 跑步时间小于14秒 可以进入决赛 然后再根据性别 进行男子/女子 分组
* <p>
* 优化两个问题:
* 1.如果用户时间不能进入决赛 则不需要输入性别
* 2.如果用户输入的性别不对 则提示性别不合适
*/
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的跑步时间:");
double time = input.nextDouble();
if (time < 14) {
System.out.println("恭喜你进入决赛!");
System.out.print("请输入您的性别:");
String sex = input.next();
if (sex.equals("男")) {
System.out.println("恭喜你进入男子组");
} else if (sex.equals("女")) {
System.out.println("恭喜你进入女子组");
} else {
System.out.println("性别不合适,请等待下一届");
}
} else {
System.out.println("继续加油");
}
}
}
5. 选择结构补充
if语句块只有一条执行语句时,一对{}可以省略,但建议保留
当多重if结构是“多选一”时,最后的else是可选的,根据需要可以省略
当多重if结构多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓
当多个条件是“包含”关系时,条件必须为升序或者降序
package com.atguigu.test7;
/**
* if语句只有一条执行语句时,一对{}可以省略,但建议保留
* */
public class Test1 {
public static void main(String[] args) {
int a = 10;
int b = 5;
if (a < b)
System.out.println("a大于b条件成立");
System.out.println("程序结束");
}
}
6. switch结构
语法:
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的取值不可相同。
switch 结构 支持的数据类型:byte short int char String(JDK7) 枚举
switch通常用于处理某个值属于固定等值的情况
break用于switch中 表示 跳出switch结构 如需每一个case都相互独立 则需要在每个case后加上break
default根据需求是否书写 default位置不固定 但是按照规范写在最后case之后
如需每种情况独立 default之后也要加上break
package com.atguigu.test7;
import java.util.Scanner;
/**
* switch 结构 支持的数据类型:byte short int char String(JDK7) 枚举
* switch通常用于处理某个值属于固定等值的情况
*
* 需求:根据名次进行奖励
* 第一名:奖励夏令营三天
* 第二名:奖励苹果13袋
* 第三名:奖励笔记本一本
* 第四名:口头表扬一次
* 其他名次:继续加油
*
* break用于switch中 表示 跳出switch结构 如需每一个case都相互独立 则需要在每个case后加上break
*
* default根据需求是否书写 default位置不固定 但是按照规范写在最后一个case之后
* 如需每种情况独立 default之后也需加上break
*
* */
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的名次:");
int num = input.nextInt();
switch (num){
case 1:
System.out.println("奖励夏令营三天");
break;
case 2:
System.out.println("奖励苹果13");
break;
case 3:
System.out.println("奖励笔记本一本");
break;
case 4:
System.out.println("口头表扬一次");
break;
default:
System.out.println("继续加油");
}
System.out.println("程序结束");
}
}
package com.atguigu.test7;
import java.util.Scanner;
/**
* switch 结构 支持的数据类型:byte short int char String(JDK7) 枚举
* switch通常用于处理某个值属于固定等值的情况
*
* 需求:根据名次进行奖励
* 第一名:奖励夏令营三天
* 第二名:奖励夏令营三天
* 第三名:奖励夏令营三天
* 第四名:口头表扬一次
* 其他名次:继续加油
* */
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入您的名次:");
int num = input.nextInt();
switch (num){
case 1:
case 2:
case 3:
System.out.println("奖励夏令营三天");
break;
case 4:
System.out.println("口头表扬一次");
break;
default:
System.out.println("继续加油");
}
System.out.println("程序结束");
}
}
package com.atguigu.test7;
/**
* switch支持的各种类型演示:byte short int char String(JDK7) 枚举
* */
public class Test4 {
public static void main(String[] args) {
byte b1 = 1;
short s1 = 2;
int i1 = 3;
char c1 = '中';
String str1 = "abc";
switch (str1){
case "a":
System.out.println("变量取值为1");
break;
case "b":
System.out.println("变量取值为2");
break;
case "abc":
System.out.println("变量取值为3");
break;
case "def":
System.out.println("变量取值为4");
break;
default:
System.out.println("变量为其他取值,执行default");
break;
}
System.out.println("程序结束");
}
}
7. 多重if和switch结构对比
两种结构都可以用于处理多种条件的判断
多重if适用于某个值处于连续的区间的情况 比如 0~60 60~70 70~80 ……
switch适用于某个值属于固定等值的情况 比如 1 2 3 4
8.循环结构
8.1 while循环
while ( 循环条件 ) {
循环操作
}
任何循环都有四个必不可少的部分:
1.计数器初始化
2.循环条件
3.循环体
4.计数器变化
目前 我们使用while循环来处理循环次数确定的情况 while循环还可以用于处理循环次数不确定的情况
通常用于处理循环次数不确定的情况 因为循环次数确定 有更简洁的循环结构 for
package com.atguigu.test8;
/**
* 使用打印语句打印20句好好学习
* */
public class Test1 {
public static void main(String[] args) {
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
System.out.println("好好学习");
}
}
package com.atguigu.test8;
/**
* 使用while循环打印10000遍好好学习
*
* 任何循环都有四个必不可少的部分:
* 1.计数器初始化
* 2.循环条件
* 3.循环体
* 4.计数器变化
*
* 目前 我们使用while循环来处理循环次数确定的情况 while循环还可以用于处理循环次数不确定的情况
* 通常用于处理循环次数不确定的情况 因为循环次数确定 有更简洁的循环结构 for循环
* */
public class Test2 {
public static void main(String[] args) {
int i = 1; // 计数器初始化
while (i <= 10000){ // 循环条件
System.out.println("第" + i + "遍好好学习"); // 循环体
i++; // 计数器变化
}
System.out.println("程序结束");
}
}
package com.atguigu.test8;
import java.util.Scanner;
/***
* 需求:老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。
* 老师给赵四安排的每天的学习任务为:上午阅读教材,学习理论部分,下午上机编程,掌握代码部分。
* */
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入学习任务是否合格? y/n:");
String answer = input.next();
while (answer.equals("n")){
System.out.println("学习任务不合格");
System.out.println("上午阅读教材");
System.out.println("下午上机编程");
System.out.print("请输入学习任务是否合格? y/n:");
answer = input.next();
}
System.out.println("恭喜你 完成任务!");
}
}