文章目录
- Java基础之流程控制语句(循环)
- 1.顺序结构
- 2.分支结构
- if语句的第一种格式
- if语句的第二种格式
- if语句的第三种格式
- Switch语句格式
- Switch的其他知识点
- default的位置和省略
- case穿透
- Switch的新特性
- 3.循环结构
- 循环的分类
- for 循环
- while 循环
- for循环 与 while循环 的对比
- 4.do...while
Java基础之流程控制语句(循环)
1.顺序结构
2.分支结构
if语句的第一种格式
if (关系表达式){ if (变量>2){
System.out.println("")
}
}
练习:
代码呈现:
public class Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入女婿的酒量");
int wine =sc.nextInt();
if (wine > 2){
System.out.println("小伙子不错,叔叔很满意你哇");
}
}
}
if语句的第二种格式
if(){
语句体1;
}else{
语句体2
}
练习:
代码 呈现:
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("键盘录入一个数表示身上带的钱");
int money = sc.nextInt();
if (money >= 100){
System.out.println("吃网红餐厅");
}else {
System.out.println("吃沙县小吃");
}
}
}
练习2:
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入实际付的钱");
int money = sc.nextInt();
if (money > 600 ){
System.out.println("支付成功");
}else{
System.out.println("支付失败");
}
}
}
练习3
代码呈现:
public class Test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个整数表示电影院的票号(1-100)");
int tickt = sc.nextInt();
if (tickt > 0 && tickt<=100){
if (tickt % 2 == 0){
System.out.println("坐右侧");
}else {
System.out.println("坐左侧");
}
}
}
}
if语句的第三种格式
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
...
else {
语句体n + 1;
}
/**首先计算关系表达式1的值
如果为true就执行语句体1;如果为false就计算关系表达式2的值
如果为true就执行语句体2;如果为false就计算关系表达式3的值
如果所以关系表达式结果都为false,就执行语句体n+1。**/
练习:
代码呈现:
public class Test4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入小明的考试分数");
int grade = sc.nextInt();
if (grade >= 0 && grade <= 100) {
if (grade >= 95 && grade <= 100) {
System.out.println("奖励一个自行车");
} else if (grade >= 90 && grade <= 94) {
System.out.println("奖励去游乐园玩一天");
} else if (grade >= 80 && grade <= 89) {
System.out.println("奖励一个变形金刚");
} else if (grade < 80) {
System.out.println("一顿毒打");
}
}else {
System.out.println("输入成绩错误");
}
}
}
Switch语句格式
switch(表达式){
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句。
格式说明:
表达式:(将要匹配的值)取值为byte. short、int、 char。
JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值(被匹配的值)。break:表示中断,结束的意思,用来结束switch语句。
default:表示所有情况都不匹配的时候,就执行该处的内容,
和if语句的else相似。
case后面的值只能是字面量,不能是变量case给出的值不允许重复
练习:
代码呈现:
public class Demo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入想吃的面条");
String noodles = sc.next();
switch (noodles){
case "兰州拉面":
System.out.println("吃兰州拉面");
break;
case "武汉热干面":
System.out.println("吃武汉热干面");
break;
case "老北京炸酱面":
System.out.println("吃老北京炸酱面");
break;
case "陕西油泼面":
System.out.println("吃陕西油泼面");
break;
default:
System.out.println("嘴咋这么挑呢,吃泡面去吧");
break;
}
}
}
Switch的其他知识点
default的位置和省略
1.位置:defaule不一定是写在最下面的,我们可以写在任意位置。只不过习惯会写在最下面
2.省略: defaule可以省略,语法不会有问题,但是不建议省略。
case穿透
case穿透是语句体中没有写break导致的。
执行流程:
首先还是会拿霍小括号中表达式的值跟下面每一个case进行匹配,
如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。
如果没有发现break,那么程序会维续执行下一个case的句体,一直遇到break或者右大括号为止。
使用场景:
如果多个case的语句体重复了,那么我们考虑利用case穿透去简化代码,
Switch的新特性
要在JDK12以及之后的版本才有
int number =10;
switch(number){
case 1 ->System.out.println("-");
case 2 ->system.out.println("二");
case 3->System.out.println("三");
default->system.out.println("没有这种选项");
练习:
代码呈现:
public class Test5 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("输入一个数代表周几");
int week = sc.nextInt();
switch (week){
/**case 1 -> System.out.println("今天是工作日");
case 2 -> System.out.println("今天是工作日");
case 3 -> System.out.println("今天是工作日");
case 4 -> System.out.println("今天是工作日");
case 5 -> System.out.println("今天是工作日");
case 6 -> System.out.println("今天是休息日");
case 7 -> System.out.println("今天是休息日");
default -> System.out.println("输入错误,请输入范围是1-7的整数");**/
case 1, 2, 3, 4, 5 -> System.out.println("今天是工作日");
case 6, 7 -> System.out.println("今天是休息日");
default -> System.out.println("输入错误,请输入范围是1-7的整数");
}
}
}
3.循环结构
循环的分类
for 循环
格式:
for(初始化语句; 条件语句; 条件控制语句){
循环语句;
}
例子:
for (int i = 1; i <= 10; i++){
System.out.println("HelloWorld")
}
执行流程:
1.执行初始化语句
2.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,执行循环体语句
3.执行条件控制语句
练习:
for (int i = 1; i <= 5; i++){
System.out.println("HelloWorld")
}
练习2:
for (int i = 1; i <= 5; i++){
System.out.println(i)
}
练习3:
for (int i = 5; i >= 1; i--){
System.out.println(i)
}
练习4
public class Test6 {
public static void main(String[] args) {
for (int i = 1; i <=5; i++){
System.out.println("第" + i + "执行断线重连的业务逻辑");
}
}
}
练习5:
public class Test7 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i<= 5; i++){
sum = sum + i;
}
System.out.println(sum);
}
}
练习6:
public class Test8 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 ==0){
sum = sum + i;
}
}
System.out.println(sum);
}
}
练习7:
public class Test9 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入第一个整数表示范围的最小值");
int number1 = sc.nextInt();
System.out.println("请输入第二个整数表示范围的最大值");
int number2 = sc.nextInt();
int count = 0;
for (int i = number1; i <= number2 ; i++) {
if (i % 3 == 0 && i % 5 == 0){
count++;
System.out.println(count);
}
}
}
}
while 循环
格式
while(条件判断语句){
循环体语句;
条件控制语句;
}
练习:
利用while循环打印1-100
public class Demo3 {
public static void main(String[] args) {
int i = 1;
while (i <= 100){
System.out.println(i);
i++;
}
}
}
for循环 与 while循环 的对比
相同点:运行规则一模一样
不同点:for循环中,控制循环的变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了而循环中,控制循环的变量,对于While循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
for 和 while 的区别:
for循环中:知道循环次数或者循环的范围
while循环:不知道循环的次数和范围,只知道循环的结束条件。
练习:
public class Test10 {
public static void main(String[] args) {
double height = 8844430;
double paper = 0.1;
int count = 0;
while (paper < height){
//每一次折叠纸张的厚度都是原来的两倍
paper = paper * 2;
count++;
}
//当循环结束之后count的值就是折叠的次数
System.out.println(count);
}
}
练习2:
需求:键盘一个整数x。
如果x是一个回文整数,打印 是回文数,否则,返回 不是回文数。
解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
public class Test11 {
public static void main(String[] args) {
/*需求:给你一个整数x。
如果 x是一个回文整数,打印 true ,
否则,返回 false 。
解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123不是。*/
/* //核心思路:把数字倒过来跟原来的数进行比较
//1.定义数字
int x = 12;
//2.获得个位数
int ge = x % 10;
//获得十位
int shi = x / 10 % 10;
//拼接
int result = ge * 10 + shi;
System.out.println(result);*/
//键盘录入一个整数
Scanner sc = new Scanner(System.in);
System.out.println("输入一个整数");
int x = sc.nextInt();
int temp =x;
int num = 0;
//利用循环从右往左获取每一位数字
while (x != 0){
int ge = x % 10;//4
//修改x的值
x= x / 10;
//
num = num * 10 + ge;
}
//System.out.println(num);
//System.out.println(num == temp);
if (num == temp){
System.out.println("是回文数");
}else{
System.out.println("不是回文数");
}
}
}
练习3:
需求:
键盘录入两个整数,被除数和除数(都是正数,且不超过int的范围)
将两数相除,要求不使用乘法、除法和 %运算符。得到商和余数。
public class Test12 {
public static void main(String[] args) {
/*需求:
给定两个整数,被除数和除数(都是正数,且不超过int的范围)
将两数相除,要求不使用乘法、除法和 %运算符。得到商和余数。
分析:被除数 / 除数 = 商 ...余数
int a =100;
int b = 10;
100 - 10 = 90
90 - 10 = 80
80 - 10 = 10
...
10 - 10 = 0(余数)
*/
//键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("输入被除数");
int a = sc.nextInt();
System.out.println("输入除数");
int b = sc.nextInt();
//定义次数
int temp = a;
int count = 0;
//while循环
while (a >= b){
a = a - b;//余数
count++;//商
}
System.out.println(temp+"除以"+b+"的商是:"+count+",余数是:"+a+".");
}
}
4.do…while
特点: 先执行后判断
格式:
初始化语句;
do {
循环体语句;条件控制语句;
}while(条件判断语句);