1 控制台输入
获取用户在控制台输入的内容,使用引用数据类型Scanner
使用Scanner步骤:
- 导包
- 创建
- 使用
// 声明当前类所在的包 package cn.javasm.demo; // 导包 import java.util.Scanner; public class TestDemo { public static void main(String[] args) { // 创建 // 类型 变量名 = new 类型(System.in); Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); // 使用 // 获取int类型的数据 int a = scanner.nextInt(); System.out.println("用户输入的是" + a); // String是引用数据类型 表示字符串 // 获取用户输入的字符串 String str = scanner.next(); System.out.println(str); } }2 流程控制语句
程序在执行过程中,各条语句的执行顺序对程序的结果是有直接的影响的。也就是说程序的流程对运行结果有直接的影响。所以我们必须要清楚每一条语句的执行流程。
分类:
- 顺序结构
- 选择结构
- 循环结构
2.1 顺序结构
顺序结构就是代码从上到下执行。默认都是顺序结构。
public static void main(String[] args) { System.out.println("今天是6月6号"); System.out.println("明天就要高考了"); System.out.println("下星期穿少点,太热了"); }2.2 选择结构
选择结构也叫分支结构,根据不同的条件执行不同的代码。
选择结构分为:
- if语句
- switch语句
2.2.1 if语句
if语句分为三种格式
2.2.1.1 if语句格式1
格式:
if (布尔表达式){ 语句体; }执行流程:
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体,直接执行其他语句
public static void main(String[] args) { System.out.println("一天晚上闲的没事干,在大街游荡~"); System.out.println("发现一个网吧"); int age = 17; if (age >= 18){ System.out.println("掏身份证开机"); System.out.println("上号"); System.out.println("开始骂人"); System.out.println("挂机"); System.out.println("下机"); } System.out.println("回家睡觉"); }注意:如果if语句中只有一行代码,可以省略大括号
流程图:
2.2.1.2 if语句格式2
格式:
if (布尔表达式){ 语句体1; }else{ 语句体2; }执行流程:
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
public static void main(String[] args) { // 创建 Scanner scanner = new Scanner(System.in); System.out.println("请输入您的年龄:"); // 使用 int age = scanner.nextInt(); if (age >= 18){ System.out.println("成年人要为自己做的事负责"); }else { System.out.println("未成年人可以少负责"); } }流程图
课堂练习: 输入一个整数,输出这个数是奇数还是偶数
public static void main(String[] args) { // 输入一个整数,输出这个数是奇数还是偶数 // alt + 回车 自动导包 Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = scanner.nextInt(); // 判断是奇数还是偶数 if (num % 2 == 0){ System.out.println(num + "是偶数"); }else { System.out.println(num + "是奇数"); } }2.2.1.3 if语句格式3
格式:
if (布尔表达式1){ 语句体1; }else if(布尔表达式2){ 语句体2; }else if(布尔表达式3){ 语句体3; }else if(布尔表达式4){ 语句体4; } ... else if(布尔表达式n){ 语句体n; }else{ 语句体n + 1; }执行流程:
- 首先判断布尔表达式1的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就继续判断布尔表达式2的结果是true还是false
- 如果是true就执行语句体2
- 如果是false就继续判断布尔表达式3的结果是true还是false
- .....
- 如果没有任何布尔表达式的结果是true,就执行语句体n + 1
流程图:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int age = scanner.nextInt(); if (age > 0 && age < 7){ System.out.println("婴幼儿"); }else if (age >= 7 && age < 12){ System.out.println("儿童"); }else if (age >= 12 && age < 18){ System.out.println("少年"); }else if (age >= 18 && age < 40){ System.out.println("青年"); }else if (age >= 40 && age < 60){ System.out.println("中年"); }else if (age >= 60 && age < 110){ System.out.println("老年"); }else { System.out.println("妖怪~"); } }课堂练习:
x >= 10 y = 3x + 1
-2 < x < 10 y = 3x
x <= -2 y = 3x - 1
让用户输入x的值,计算出y的值并输出
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个x的值"); int x = scanner.nextInt(); int y; if (x >= 10){ y = 3 * x + 1; }else if(x > -2 && x < 10){ y = 3 * x; }else { y = 3 * x - 1; } System.out.println("y的值是" + y); }课堂练习:根据用户输入的月份,输出正确的季节
public static void main(String[] args) { // 根据用户输入的月份,输出正确的季节 Scanner scanner = new Scanner(System.in); System.out.println("请输入月份"); int month = scanner.nextInt(); if (month >= 3 && month <= 5){ System.out.println("春天去郊游"); }else if (month >= 6 && month <= 8){ System.out.println("夏天吃西瓜"); }else if (month >= 9 && month <= 11){ System.out.println("秋天吃柿子"); }else if (month == 12 || month == 1 || month == 2){ System.out.println("冬天烤红薯"); }else { System.out.println("您输入的月份不正确!"); } }2.2.2 switch语句
格式:
switch (表达式){ case 目标值1: 语句体1; break; case 目标值2: 语句体2; break; ... case 目标值n: 语句体n; break default: 语句体n + 1; break; }解释:
- 表达式的取值类型可以是 byte short int char
- JDK5之后可以是枚举
- JDK7之后可以是字符串
- case 后面是要和表达式进行比较的值
- 语句体可以是一条语句,也可以是多条语句
- break表示中断,可以立即结束switch语句
- default语句表示所有的目标值都没有匹配时,执行default中的语句体
执行流程:
- 首先计算表达式的值
- 使用表达式的值依次和case的目标值进行比较,如果相同就执行对应的语句体。
- 如果都不相同,就执行default语句
public static void main(String[] args) { // 根据用户输入的数字,显示正确的星期几 Scanner scanner = new Scanner(System.in); System.out.println("请输入数字"); int weekday = scanner.nextInt(); switch (weekday){ 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("请输入1-7的整数"); break; } }流程图:
注意点:
- default中的break如果在代码的最后,可以省略
- switch语句中的顺序不影响最终的结果
- case具有穿透效果。如果没有break的影响,会一直执行下去。
课堂练习:
根据用户输入的月份,输出正确的季节
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入对应的月份"); int month = scanner.nextInt(); switch (month){ case 3: case 4: case 5: System.out.println("春天万物复苏"); break; case 6: case 7: case 8: System.out.println("夏天捉小龙虾"); break; case 9: case 10: case 11: System.out.println("秋天登高"); break; case 12: case 1: case 2: System.out.println("冬天打雪仗"); break; default: System.out.println("傻der~"); break; } }2.3 循环结构
2.3.1 概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称之为循环体语句。当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false从而结束循环。
循环语句:
- for循环
- while循环
- do-while循环
2.3.2 循环语句的组成
- 循环变量初始化(初始化表达式):
一条或者多条语句,这些语句完成一些初始化操作
- 循环出口(布尔表达式)
这是一个boolean表达式,这个表达式能决定是否要继续执行循环体
- 循环语句(循环体)
这个部分是真正要多次执行的代码
- 循环增量(步进表达式)
这个部门在一次循环体结束后,下一次循环判断条件执行前执行。通过控制循环条件变量,使得循环在合适的时候结束。
2.3.3 for循环结构
格式:
for (初始化表达式1;布尔表达式2;步进表达式4){ 循环体3; }执行流程:
执行顺序: 1 2 3 4 2 3 4 ..... 2
如果布尔表达式的结果是true,那么就继续循环,如果结果是false,就结束循环
流程图:
public static void main(String[] args) { // // 打印100次HelloWorld // for (int i = 1;i <= 100;i++){ // System.out.println("HelloWorld" + i); // } // // // 打印10 - 1 // for (int i = 10;i >= 1;i--){ // System.out.println(i); // } // 求1-100之间的偶数和 // 代表和的变量 // int sum = 0; // for (int i = 1;i <= 100;i++){ // // 判断i是否是偶数 // if (i % 2 == 0){ // sum += i; // } // } // // shift + alt + 上下键 // System.out.println("和是" + sum); // 统计"水仙花数"的个数 // 水仙花数是一个三位数,其中个位的立方 + 十位的立方 + 百位的立方和 等于 这个三位数自身 // 153 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153 // 水仙花数的个数 int count = 0; for (int i = 100;i < 1000;i++){ // 获取i的个位十位和百位 int ge = i % 10; int shi = i / 10 % 10; int bai = i / 100 % 10; if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){ count++; } } System.out.println("水仙花数有" + count + "个"); }2.3.4 while循环结构
基本格式:
while (布尔表达式){ 循环体语句; }扩展格式:
初始化表达式1; while (布尔表达式2){ 循环体语句3; 步进表达式4; }执行顺序: 1 2 3 4 2 3 4 ...2
流程图:
public static void main(String[] args) { // 输出100次HelloWorld // int i = 1; // while (i <= 100){ // System.out.println("HelloWorld"); // i++; // } // 求1-100之间的偶数和 // int sum = 0; // int i = 2; // while (i <= 100){ // sum += i; // // i += 2; // } // System.out.println("sum的值是" + sum); // 打印水仙花数 int i = 100; while (i < 1000){ int ge = i % 10; int shi = i / 10 % 10; int bai = i / 100; // 判断是否是水仙花数 if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) System.out.println("水仙花数是" + i); i++; } }2.3.5 do-while循环结构
基本格式:
do{ 循环体语句; }while(布尔表达式);扩展格式:
初始化表达式1; do{ 循环体语句3; 步进表达式4; }while(布尔表达式2);执行顺序:1 3 4 2 3 4 2 3 4 .....2
流程图:
public static void main(String[] args) { // // 打印100次HelloWorld // int i = 1; // do{ // System.out.println("HelloWorld"); // i++; // }while (i <= 100); // 求 1- 100之和 // int i = 1; // int sum = 0; // do{ // sum += i; // i++; // }while (i <= 100); // System.out.println("sum的值是" + sum); // 统计水仙花数有多少个 int i = 100; int count = 0; do{ // 获取个位十位和百位 int ge = i % 10; int shi = i / 10 % 10; int bai = i / 100; // 判断是否是水仙花数 if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) count++; i++; }while (i < 1000); System.out.println("水仙花数总共有" + count + "个"); }三种循环的区别?
- dowhile循环至少会执行一次循环语句
- for循环结束后,控制条件语句的那个变量就已经被回收了。但是while和doWhile循环中的变量依然存在。
- 使用推荐: for --> while -- > doWhile
注意:循环是可以嵌套的。
for (int i = 1;i <= 10;i++){ System.out.println("i = " + i); for (int j = 1;j <= 10;j++){ System.out.println("j = " + j); } }2.3.6 跳转控制语句
让循环在某一步的时候结束或者跳过某些数据不要这些数据,Java提供了跳转控制语句来中断和跳转。
- break 中断
- 可以用在循环中
- 也可以用在switch语句中
- 表示立即结束循环或者结束switch语句
- continue 继续
- 只能用在循环中
- 表示立即结束本次循环,开始下一次循环
无论是break还是continue,在多个循环嵌套中,只作用于当前循环
for (int i = 1;i <= 10;i++){ System.out.println("i = " + i); for (int j = 1;j <= 10;j++){ // 立即结束最近的循环 if (j == 2) break; System.out.println("j = " + j); } }2.3.7 死循环
死循环又称之为永真循环,或者无限循环.就是循环的条件判断一直都是true,循环不会结束。
死循环标准写法: while(true){}
// 死循环 // while (true){ // int i = scanner.nextInt(); // System.out.println(i); // if (i == 10) break; // } // for (; true; ) { // } // for (;;){ // // } String str = null; while (!"y".equals(str)){ str = scanner.next(); System.out.println(str); }