【04】JAVASE-循环语句【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇

Lecture:波哥

在这里插入图片描述

  Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。

四、循环语句

循环语句就是重复执行某块代码,能够大大提高我们的效率

/**
	 * 输出一个 好好学习,天天向上 这个信息到控制台上
	 * 输出两遍
	 *    10遍呢
	 *    100遍
	 *    10000遍?
	 * @param args
	 */
	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("好好学习,天天向上");*/
		for(int i = 0 ; i < 10000 ; i ++){
			System.out.println("好好学习,天天向上 : " + i);
		}

	}

1.for循环

1.1 for循环的语法格式

for( 表达式1 ; 表达式2 ; 表达式3 ) 
{
   // 循环体语句  
}

语法格式说明:

for( 初始化语句 ; 循环条件语句 ; 控制条件语句 ) 
{
   // 循环体语句  
}
表达式说明
表达式1初始化语句,完成变量的初始化操作 初始化语句只会在第一次执行一次
表达式2循环条件语句,boolean类型,返回true进入循环体,返回false结束循环
表达式3控制条件语句,在循环体执行完成后执行的代码,负责修正变量,改变循环条件的

1.2 for循环的执行流程

在这里插入图片描述

1.3 课堂案例

  1. 控制台输出数据1-10
  2. 计算1到100的和,用for语句实现
  3. 求1~100之间不能被3整除的数的和

案例代码

/**
	 * 控制台输出数据1-10
	 * @param args
	 */
public static void main(String[] args) {
    // 添加注释的快捷键 多行注释 ctrl + shift + /
    /*for (int i = 0 ; i < 10 ; i ++) {
			System.out.println(i+1);
		}*/
    //		循环案例的实现  单行注释 Ctrl+/
    for (int i = 1 ; i <= 10 ; i ++) {
        System.out.println(i);
    }

}
/**
	 * 计算1到100的和,用for语句实现
	 * @param args
	 */
public static void main(String[] args) {
    // 在for循环之外创建一个变量 来接收我们的数据 相当于一个 容器
    int total = 0 ; // 保存计算结果
    for ( int i = 1 ; i <= 100 ; i ++) {
        total += i; // 将变量的结果累加到到total中
    }
    System.out.println(total);

}
package com.bobo.fordemo;

public class ForDemo04 {

	/**
	 * 求1~100之间不能被3整除的数的和
	 *    1.先找到所有不能被3整除的数
	 *    2.将找到的数累加即可
	 * @param args
	 */
	public static void main(String[] args) {
		int total = 0;
		for( int i = 1 ; i <= 100 ; i ++){
			if (i % 3 != 0) {
				// 表示不能被3整除
				// System.out.println(i);
				total += i;
			}
		}
		System.out.println("1~100之间不能被3整除的数的和:" + total);
	}

}

扩展案例:

1.求n的阶乘 9 * 8 * 7 * … * 1

package com.bobo.fordemo;

import java.util.Scanner;

public class ForDemo05 {

	/**
	 * 求n的阶乘 9 * 8 * 7 * ... * 1
	 * 5的阶乘
	 *     5 * 4 * 3 * 2 * 1
	 *     1 * 2 * 3 * 4 * 5
	 *     其实和 1 到 N的整合的和  效果是一样
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("输入阶乘的值:" );
		int num = in.nextInt();
		
		int total = 1 ; // 记录阶乘结果的变量
		for( int i = 1 ; i <= num; i++){
			total *= i;
		}
		
		System.out.println(num + "的阶乘是:" + total);

	}

}

2.实现如下的效果

请输入一个值:
根据这个值可以输出如下的加法表:
0 + 6 = 6
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
4 + 2 = 6
5 + 1 = 6
6 + 0 = 6
package com.bobo.fordemo;

import java.util.Scanner;

public class ForDemo06 {

	/**
	 * 请输入一个值:
		根据这个值可以输出如下的加法表:
		0 + 6 = 6
		1 + 5 = 6
		2 + 4 = 6
		3 + 3 = 6
		4 + 2 = 6
		5 + 1 = 6
		6 + 0 = 6
		
		i + (6-i) = 6
		循环N次,每次循环打印一条输出语句
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入一个1-9之间的数字" );
		int num = in.nextInt();
		for (int i = 0 ; i <= num ; i++) {
			System.out.println(i + " + " + (num - i ) + " = " + num);
		}
		
		System.out.println("------------");
		// 第二种方式 通过多个变量来控制
		for (int i = 0, j = num ; i <= num ;i++,j--) {
			System.out.println(i + " + " + j + " = " + num);
		}
		
		System.out.println("------------");
		// 第二种方式 通过多个变量来控制
		for (int i = 0, j = num ; j >= 0 ;i++,j--) {
			System.out.println(i + " + " + j + " = " + num);
		}
	}

}

3.在控制台输出所有5位数的回文数字

注意:回文数如 12321,13531 等等… 11111

package com.bobo.fordemo;

public class ForDemo07 {

	/**
	 * 在控制台输出所有5位数的回文数字
  		注意:回文数如 12321,13531 等等... 11111
  		
  		解决思路:
  		   1.遍历找出所有的5位数
  		   2.分离出遍历的数字的  万位  千位   十位  个位
  		   3.判断如果 万位和个位相等 同时 千位和十位相等 说明是我们要找的数字
	 * @param args
	 */
	public static void main(String[] args) {
		for(int i = 10000; i < 100000 ; i ++ ){
			int ge = i / 1 % 10;
			int shi = i / 10 % 10;
			int qian = i / 1000 % 10;
			int wan = i / 10000 % 10;
			if (ge == wan && shi == qian) {
				System.out.println(i);
			}
		}

	}

}

4.在控制台输出1000以内的所有的水仙花数,并统计水仙花数的个数。

注意:水仙花数指的是其各位数的立方和等于该数本身的三位数

153 = 1^3 + 5^ + 3^ = 153

package com.bobo.fordemo;

public class ForDemo08 {

	/**
	 * ctrl + d 快速删除一行
	 * 
	 * 在控制台输出1000以内的所有的水仙花数,并统计水仙花数的个数。
		注意:水仙花数指的是其各位数的立方和等于该数本身的三位数
		153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 =153
		
		解决思路:
		   1.遍历出所有的数字
		   2.对遍历的数字,拆分出 个位 十位 百位
		   3.判断 个位的立方+ 十位的立方 + 百位的立方 是否等于遍历的数字本身
	       4.是  输出这个结果  统计变量+1
	       5.不是 不做任何处理
	 * @param args
	 */
	public static void main(String[] args) {
		int count = 0 ; // 统计水仙花数的个数
		for (int i = 0 ; i <= 1000; i ++) {
			int ge = i / 1 % 10;
			int shi = i / 10 % 10;
			int bai = i / 100 % 10;
			/*if(ge * ge * ge + shi * shi * shi + bai* bai * bai == i){
				System.out.println(i);
				count ++;
			}*/
			if (Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3) == i) {
				System.out.println(i);
				count ++;
			} 
		}
		
		System.out.println("1000以内的水仙花数是:" + count);
	}

}

1.4 for循环的注意事项

1.4.1 大括号可以省略

如果循环体大括号省略 ,循环体默认执行for语句后面的第一条语句(;结尾)

public class ForDemo09 {

	public static void main(String[] args) {
		// 作用域:i 的作用域 是在for循环以内  表达式 1 2 3 4 中使用
		for(int i = 0 ; i < 4 ; i ++)
			//;
			System.out.println(i);// 这个是我们的循环体
		System.out.println("---------");
	}

}
1.4.2 表达式2的值是一个boolean类型

表达式2如果有多个条件我们需要用逻辑运算符连接

int a = 10;
int b = 20;
for(int i = 0 ; i < 10 && (a > 0 || b < 30) ; i ++){

}
1.4.3 表达式2可以省略,但是";"不能省略

​ 如果表达式2省略的话,那么程序会一直执行,直到资源耗尽,死循环

public static void main(String[] args) {
    for ( int i = 0 ;  ; i ++) {
        System.out.println("-->" + i);
    }
}
1.4.4 表达式1 省略,表达式3省略

​ 表达式1和表达式3也省略

package com.bobo.fordemo;

public class ForDemo11 {

	/**
	 * 表达式1 初始化变量的
	 * @param args
	 */
	public static void main(String[] args) {
		int i = 0; // 表示i的作用域在方法中
		for (; i < 10 ;) {
			System.out.println(i);
			
			// 将表达式4的信息 写到循环体的尾部
			i ++;
		}
		
		/*for ( int i = 0 ; i < 10; i++) {
			
		}*/
	}

}

1.4.5 表达式123都可以省略

​ 表达式123都可以省略,但是两个";"是不能够省略的,出现死循环的情况

public class ForDemo12 {

	/**
	 * 表达式1 初始化变量的
	 * @param args
	 */
	public static void main(String[] args) {
		for(;;){
			System.out.println("----");
		}
	}

}

2.while循环

​ while是Java使用频率也比较高的一种循环方式。while语句的语法结构要比for循环简单些

2.1 语法格式

while (条件表达式) {
    // 循环语句
}
/**
	 * while循环
	 * @param args
	 */
public static void main(String[] args) {
    int i = 0;
    while( i < 10){
        System.out.println("i = " + i);
        i ++ ;
    }

    System.out.println("循环结束...");
}

2.2 while语句的执行顺序

  1. 首先判断条件表达式结果是为true还是false
  2. 如果结果是true,执行循环体
  3. 如果结果是false,退出循环体

在这里插入图片描述

这里面为了便于大家的理解,可以将while循环看出for循环的一种简化形式

for( 表达式1 ; 表达式2 ; 表达式3 ){
 	循环体
}
--->
表达式1
for( ; 表达式2 ; ){
	循环体;
	表达式3
}

对应的while循环

表达式1
while (表达式2){
    循环体
    表达式3
}

2.3 课堂案例

1.用while语句去实现1到100的和

package com.bobo.whiledemo;

public class WhileDemo02 {

	/**
	 * 用while语句去实现1到100的和
	 * @param args
	 */
	public static void main(String[] args) {
		int total = 0; // 记录总和
		int i = 1; // 声明的变量
		while( i <= 100){
			total += i;
			// 改变循环条件
			i ++; // 不能漏掉,不然会 死循环
		}
		System.out.println("1到100的和是:" + total);

	}

}

2.用while语句实现1到100偶数的和


	/**
	 * 用while语句实现1到100偶数的和
	 * @param args
	 */
	public static void main(String[] args) {
		int total = 0;
		int i = 0;
		while( i <= 100){
			if( i % 2 == 0){
				// 表示循环的数字是偶数
				total += i;
			}
			i++;
		}
		
		System.out.println("1到100之间的偶数和是:" + total);
	}

    public static void main(String[] args) {
        int sum = 0;
        int i = 2;
        while(i <= 100){
            sum += i;
            i += 2; // 每次自增2
        }
        System.out.println("sum = " + sum);
    }


3.将前面讲的for循环中的案例该为通过while循环来实现

3.do while循环

​ do while循环的特点:先执行一次循环体,然后在判断条件是否成立

3.1 语法格式

do{
    循环语句;
}while ( 条件表达式 ) ;
public static void main(String[] args) {
    int i = 0 ;
    do{
        // 循环在循环条件判断之前执行一次
        System.out.println("----" + i);
    }while(i < 0);
    System.out.println("循环执行结束...");

}

3.2 执行顺序

  1. 先执行循环语句一次
  2. 然后判断条件语句的返回结果是true还是false
  3. 如果是true再执行一次循环体,然后判断条件语句
  4. 如果是false,那么直接退出循环

在这里插入图片描述

3.3 课堂案例

1.使用do-while语句去实现1到100的和

2.使用do-while循环实现1-100的偶数求和

3.使用do-while循环实现for循环中的所有的案例

4. while循环和for循环的对比

  1. for循环和while循环都是先判断再执行,do-while是先执行再判断,并且一定会执行一次循环体
  2. 在循环结束之后,还希望能够使用循环变量,使用while循环,否则使用for循环,for循环的变量i只能作用于循环体
  3. 死循环的方式

while:

while (true) {}

do -while:

do{
    
}while(true);

for:

for (;;){
    
}

循环方式的选择:

1.如果循环条件是一个区间范围(循环次数确定的),推荐使用for循环

2.如果循环次数不明确的情况下,推荐使用while循环

3.在第二个基础上如果要先执行再判断就使用do-while循环,否则使用while循环

场景引入:

请在控制台输出如下的图形
********
********
********
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("********");
    System.out.println("********");
    System.out.println("********");
}

5.嵌套循环

5.1 嵌套循环的格式

最常用的方式:

for(表达式1 ; 表达式2 ; 表达式3){
    for(表达式1 ; 表达式2 ; 表达式3){
    	
	}
}

其他的组合

for(表达式1 ; 表达式2 ; 表达式3){
    while(表达式){
        
    }
}
while(表达式){
     while(表达式){
        
	}   
}
do{
    for(表达式1 ; 表达式2 ; 表达式3){
    	
	}
}while(表达式);

5.2 嵌套循环的规则

  1. 外层循环控制行数,内层循环控制列数
  2. 外层循环变量变化一次,内层循环变量要变化一轮

5.3 课堂案例

1.打印如下的图案

********
********
********
package com.bobo.forfor;

public class QTDemo01 {

	/**
	 * 请在控制台输出如下的图形
	 *  ********
		********
		********
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*System.out.println("********");
		System.out.println("********");
		System.out.println("********");*/
		for(int i = 0 ; i < 8; i ++){
			System.out.print("*");
		}
		System.out.println(); // 显示的换行
		for(int i = 0 ; i < 8; i ++){
			System.out.print("*");
		}
		System.out.println();// 显示的换行
		for(int i = 0 ; i < 8; i ++){
			System.out.print("*");
		}
		System.out.println();// 显示的换行
		System.out.println("------------------");
		
	}

}
	public static void main(String[] args) {

		/*
		 * 1. 外层循环控制行数,内层循环控制列数
		 * 2. 外层循环变量变化以此,内层循环变量要变化一轮
		 */
		for (int i = 0 ; i < 3 ; i ++) { // 外层循环控制行数
			for( int j = 0 ; j < 8 ; j ++){ // 内层循环控制列数
				System.out.print("*");
			}
			System.out.println(); // 内层循环走完一遍 显示的换行
		}
    }

2.打印如下图案,直角三角形

*
**
***
****
*****
******
package com.bobo.forfor;

public class QTDemo02 {

	/**
	 * 输出如下图案
	 *  *
		**
		***
		****
		*****
		******
		
		1. 外层循环控制行数,内层循环控制列数
		2. 外层循环变量变化以此,内层循环变量要变化一轮
	
	 * @param args
	 */
	public static void main(String[] args) {
		for(int i = 0 ; i < 6 ; i ++){
			// i = 0 1*
			// i = 1 2*
			// i = 2 3*
			// ...
			for(int j = 0 ; j < i +1 ; j ++){
				System.out.print("*");
			}
			System.out.println();
		}

	}

}

3.打印如下图案,直角三角形

*
***
*****
*******
*********
package com.bobo.forfor;

public class QTDemo03 {

	/**
	 * 输出如下图案
	 *  *
		***
		*****
		*******
		*********
		***********
		
		1. 外层循环控制行数,内层循环控制列数
		2. 外层循环变量变化以此,内层循环变量要变化一轮
	
	 * @param args
	 */
	public static void main(String[] args) {
		for(int i = 0 ; i < 6 ; i ++){
			// i = 0 1*
			// i = 1 3*
			// i = 2 5*
			// ...
			for(int j = 0 ; j < 2 * i +1 ; j ++){
				System.out.print("*");
			}
			System.out.println();
		}

	}

}

4.打印九九乘法表

package com.bobo.forfor;

public class QTDemo04 {

	/**
	 * 打印九九乘法表
	 * 1*1=1
	 * 1*2=2  2*2=4
	 * 1*3=3  2*3=6 3*3=9
	 * ....
	 * 1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=72 ... 9*9=81
	 * 
	 * i = 1 1个表达式
	 * i = 2 2个表达式
	 * ..
	 * i = 9 9个表达式
	 * @param args
	 */
	public static void main(String[] args) {
		for(int i = 1 ; i <= 9 ; i ++){
			for(int j = 1 ;j <= i ; j ++){
				System.out.print(j + " × " + i + " = " +  i*j + "\t");
			}
			System.out.println();
		}

	}

}

输出的结果

1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81

5.计算若干个学生5门课的平均分。

package com.bobo.forfor;

import java.util.Scanner;

public class QTDemo05 {

	/**
	 * 计算若干个学生5门课的平均分。
	 *    提示:
	 *       外层循环一次处理一个学生
	 *       内层循环一遍处理一个学生的五门成绩
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("输入学生的个数:");
		int num = in.nextInt();
		
		for(int i = 1 ; i <= num ; i ++){
			double sum = 0.0 ; // 记录当前学生的总成绩
			for(int j = 0 ; j < 5 ; j ++){ // 五门课程 内层循环5次
				// 获取该学生的每门课程的成绩
				double score = 0.0;
				System.out.println("请输入第" + i + "个学生的第" + (j+1) + "门的成绩");
				score = in.nextDouble();
				sum += score;
			} // 通过一次内层循环获取到该学生的总成绩
			System.out.println("第" + i + "个学生的平均成绩是:" + sum/5);
		}

	}

}

在这里插入图片描述

6.break、continue、return关键字

6.1 break关键字

6.1.1 break关键字介绍

​ 在循环过程中我们要跳出循环的时候那么可以通过break关键字来实现,改变程序控制流。

用户do-while、while、for循环中,可以跳出循环而执行循环以后的语句

在这里插入图片描述

6.1.2 使用的场合
  1. 循环语句中(单层循环、嵌套循环)

  2. switch语句

6.1.3 课堂案例

1.打印1到10个数,遇到4的倍数程序自动退出

package com.bobo.breakdemo;

public class BreakDemo01 {

	/**
	 * 打印1到10个数,遇到4的倍数程序自动退出
	 * @param args
	 */
	public static void main(String[] args) {
		for( int i = 1 ;i <= 10 ; i++){
			if(i % 4 == 0){
				break; // 跳出循环 执行之后的代码
			}
			System.out.println(i);
		}
		System.out.println("程序结束...");

	}

}

2.循环录入学生成绩,求和。如果输入的成绩为负数。则停止输入,给出错误的提示

package com.bobo.breakdemo;

import java.util.Scanner;

public class BreakDemo02 {

	/**
	 * 循环录入学生成绩,求和。如果输入的成绩为负数。则停止输入,给出错误的提示
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int sum = 0;
		int i = 1; // 记录循环的次数
		while(true){
			System.out.println("请输入第" + i + "个学生的成绩:");
			int score = in.nextInt();
			if(score < 0){
				// 表示是负数
				System.out.println("你输入的数据有误!!!");
				break; // 退出循环
			}
			sum += score;
			System.out.println("sum = " +sum);
			i++;
		}
	}

}

3.嵌套循环中的break;只能跳出包裹的那层循环

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {

            for (int j = 0; j < 5; j++) {

                if(j == 3 && i ==2){
                    break;
                }
                System.out.print( i + "+ " + j + " = " + (i + j ) + "\t" );
            }
            //break;
            System.out.println();
        }
    }

在这里插入图片描述

6.2 continue 关键字

作用:continue关键字用于跳过某个循环语句的一次执行,下一次循环还会继续

使用的场合:跳过循环体中剩余的语句而执行下一次循环

在这里插入图片描述

package com.bobo.continuedemo;

import java.util.Scanner;

public class ContinueDemo01 {

	/**
	 * 循环录入Java课程的学生成绩,统计分数大于等于80分的学生比例
	 * 分析:
	 *    1.通过循环获取分数大于等于80分的学生人数num
	 *    2.判断成绩是否<80分,满足条件不执行num++,直接进入下一次循环
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入班级总的人数:");
		int count = input.nextInt();
		int num = 0 ; // 记录成绩大于等于80分的人数
		for(int i = 0 ; i < count ; i ++){
			System.out.println("请输入第" + i + "个学生的成绩:");
			int score = input.nextInt();
			if(score < 80){
				continue;
			}
			num++;
		}
		System.out.println("80分以上的人数:" + num);
		System.out.println("80分以上的人数的比例:" + num/(double)count);

	}

}

6.3 break和continue的对比

使用场合

  1. break可以用于switch语句和循环结构中
  2. continue只能用于循环结构中

作用:

  1. break语句终止某个循环,程序跳转到循环块外的下一条语句

  2. continue跳出本次循环,进入下一次循环

6.4 课外练习

1.循环录入会员信息

在这里插入图片描述

package com.bobo.continuedemo;

import java.util.Scanner;

public class ContinueDemo02 {

	/**
	 * 循环录入会员信息
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("MyShopping管理系统....");
		for(int i = 0 ; i < 3 ; i ++){
			System.out.println(i + "请输入会员号<4位整数>");
			int vipNumber = input.nextInt();
			System.out.println("请输入会员生日(月/日 用俩位整数表示):");
			String birthday = input.next();
			System.out.println("请输入会员的积分:");
			int score = input.nextInt();
			
			if( !(vipNumber >=1000 && vipNumber < 10000)){
				System.out.println("客户号" + vipNumber + "无效");
				System.out.println("录入信息失败...");
				continue;
			}
			
			System.out.println("您录入的会员信息是:");
			System.out.println(vipNumber + "\t" + birthday + "\t" + score);
		}

	}

}

在这里插入图片描述

2.模拟验证用户登录信息

录入成功:

在这里插入图片描述

在这里插入图片描述

package com.bobo.continuedemo;

import java.util.Scanner;

public class ContinueDemo03 {

	/**
	 * 模拟用户登录操作
	 *   情况:
	 *      1.登录成功
	 *      2.登录失败,提示可以使用的登录次数,
	 *      3.登录失败的次数超过了规定的次数,就不让再登录
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		for(int i = 0 ; i < 3 ; i ++){ // 循环控制登录的次数
			System.out.println("请输入登录的账号:" );
			String userName = input.next();
			System.out.println("请输入密码:");
			String password = input.next();
			// 判断账号密码是否正确 admin  123456
			if("admin".equals(userName) && "123456".equals(password)){
				// 表示登录成功
				System.out.println("欢迎光临MyShopping管理系统....");
				break; // 跳出循环
			}
			
			// 表示登录失败
			
			if(i == 2){
				System.out.println("对不起,您3次机会都输入错误~~");
				continue;
			}
			
			System.out.println("认证失败,您还有" + (2-i) + "次机会");
		}

	}

}

在这里插入图片描述

在这里插入图片描述

6.5 return关键字

​ return关键字的作用是从当前方法中退出。返回到调用该方法的语句处,并且从该语句的下一条语句处开始执行。还没有讲方法,我们会在下节课中给大家详细介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/579649.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法学习笔记Day9——动态规划基础篇

一、介绍 本文解决几个问题&#xff1a;动态规划是什么&#xff1f;解决动态规划问题有什么技巧&#xff1f;如何学习动态规划&#xff1f; 1. 动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法&#xff0c;只不过在计算机问题上应用比较多&#xff…

微信小程序小游戏开发,微信开发者工具提示该目录下的项目(wxapp2)已在工具中创建,怎么办

微信小程序小游戏开发&#xff0c;微信开发者工具提示该目录下的项目&#xff08;wxapp2&#xff09;已在工具中创建&#xff0c;怎么办 情况描述&#xff0c; 导入一个项目的时候&#xff0c;导入成了小游戏项目了 想换成小游戏项目&#xff0c;变不了了&#xff0c;提示 “…

未来已来:解锁AGI的无限潜能与挑战

未来已来&#xff1a;解锁AGI的无限潜能与挑战 引言 假设你有一天醒来&#xff0c;发现你的智能手机不仅提醒你今天的日程&#xff0c;还把你昨晚做的那个奇怪的梦解释了一番&#xff0c;并建议你可能需要减少咖啡摄入量——这不是科幻电影的情节&#xff0c;而是人工通用智能…

解决Milvus官网提供的单机版docker容器无法启动,以及其它容器进程与Milvus容器通信实现方案【Milvus】【pymilvus】【Docker】

文章目录 问题预备知识方案获取pymilvus获取milvus 实例多容器通信 问题 我的需求是做混合检索单机版可以满足&#xff0c;要走Docker容器部署&#xff0c;还需要和另一个容器中的程序做通信。官方文档提供的Milvus安装启动Milvus方案&#xff0c;见文档&#xff1a;传送门 我…

wlan二层直连组网实验(ensp)

目录 1. VLAN 端口类型及参数设计2. IP 地址规划3. WLAN数据规划(1) DHCP服务器配置(2) AC 源接口地址、认证方式配置(3) AP 组的创建(4) 创建域管理模板、国家码认证(5) 创建安全模板(6) 创建SSID模板(7) 创建VAP模板(8) AP组绑定模板(9) 查看&#xff1a; 1. VLAN 端口类型及…

以太网LAN双向透明传输CH9120透传芯片实现以太网转232串口转485转TTL串口

网络串口透传芯片 CH9120 1、概述 CH9120 是一款网络串口透传芯片。CH9120 内部集成 TCP/IP 协议栈&#xff0c;可实现网络数据包和串口数据的双向透明传输&#xff0c;具有 TCP CLIENT、TCP SERVER、UDP CLIENT 、UDP SERVER 4 种工作模式&#xff0c;串口波特率最高可支持到…

03 Docker入门Dockerfile详解及镜像创建

1.1 使用 Dockerfile 构建镜像 新建一个 Dockerfile 文件vi Dockerfile 将下面的内容复制粘贴进去:## Base Images ## 从天池基础镜像构建(from的base img 根据自己的需要更换,建议使用天池open list镜像链接:https://tianchi.aliyun.com/forum/postDetail?postId=67720) F…

【Unity动画系统】动画状态基本属性与相关API、IK简单概述

动画状态基本属性与相关API Tag&#xff1a;判断是否当前播放着相对应Tag的动画&#xff0c;如果是&#xff0c;那么玩家的输入就是无效的。 using UnityEngine.InputSystem;public AnimatorStateInfo stateInfo;void State(){//stateInfo animator.GetCurrentAnimatorStateIn…

AcrelEMS-MH民航机场智慧能源管平台解决方案【可靠供电/降低能耗/高效运维】

民航机场行业背景 自2012年以来&#xff0c;我国民航运输规模出现了显著增长&#xff0c;旅客运输量&#xff1a;从2012年的3.19亿人次上升至2019年的6.6亿人次&#xff08;注&#xff1a;为剔除疫情影响&#xff0c;此处采取疫情前2019年的数据&#xff0c;下同&#xff09;&…

数据结构七:线性表之链式栈的设计

在上篇博客&#xff0c;学习了用数组实现链的顺序存储结构&#xff0c;那是否存在用单链表实现栈的链式存储结构&#xff0c;答案是当然的&#xff0c;相比于顺序栈&#xff0c;用数组实现的栈效率很高&#xff0c;但若同时使用多个栈&#xff0c;顺序栈将浪费很多空间。用单链…

用NuGet安装 Oracle ODP.NET

oracle官网原文&#xff1a;Using NuGet to Install and Configure Oracle Data Provider for .NET Using NuGet to Install and Configure Oracle Data Provider for .NET In this section, you will install ODP.NET NuGet packages from nuget.org. Select View > Solut…

PDF 正确指定页码挂载书签后,书签页码对不上

这个问题与我的另一篇中方法一样 如何让一个大几千页的打开巨慢的 PDF 秒开-CSDN博客 https://blog.csdn.net/u013669912/article/details/138166922 另做一篇原因是一篇文章附带一个与该文章主题不相关的问题时&#xff0c;不利于被遇到该问题的人快速搜索发现以解决其遇到的…

8_手眼标定总结_auboi5机械臂与海康平面相机

经过不断地学习与调试&#xff0c;不断地学习网络上其他同志分享的资料&#xff0c;opencv手眼标定迎来了阶段性结束。实际测试结果在机械臂坐标系中X方向差5mm左右。 代码参考《https://blog.csdn.net/wanggao_1990/article/details/81435660》 注意事项&#xff1a; ①标定…

AG32 MCU在触摸屏的应用(AGM FPGA/MCU行业应用)

传统的屏驱MCU常见应用于洗衣机、空调、空调面板、仪器仪表等人机交互界面显示场景中&#xff0c;通常是以段码的形式显示设备运转的时间、温度、测量结果等简单运行数据&#xff0c;随着人机交互需求丰富化&#xff0c;智能家居设备、摩托车、电动车等产品也逐步增加了屏幕显示…

如何在 Ubuntu 12.04 上使用 Apache 配置 WebDAV 访问

简介 WebDAV 是内置在 HTTP 中的分布式网络编辑实现&#xff0c;允许您轻松共享文件并与他人协作。 我们可以在 Web 服务器中安装此扩展&#xff0c;以允许通过 Web 浏览器远程读写访问本地文件。在本指南中&#xff0c;我们将在带有 Apache Web 服务器的 Ubuntu 12.04 VPS 上…

【小沐学Java】VSCode搭建Java开发环境

文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器&#xff0c;可在桌面上…

全志ARM-超声波测距

超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和收超声波&#xff0c;利用时间差和声音传播速度&#xff0c; 计算出模块到前方障碍物的距离 1.测距原理&#xff1a; 给Trig端口至少10us的高电平发送声波&#xff0c;Echo信号&#xff0c;由低电平跳转到高电平…

Docker 部署与操作

一 国内&#xff1a; 中国电信天翼云 提供包括云主机在内的全方位云计算服务&#xff0c;侧重于安全合规和企业级服务。 利用电信的网络优势&#xff0c;提供稳定可靠的基础设施服务。 中国联通沃云 提供包括云主机在内的多项云计算服务&#xff0c;适合不同行业和场景。 …

Redis篇:缓存雪崩及解决方案

1.何为缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 2.缓存雪崩的解决方案 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级…

如何避免被恶意攻击的IP地址

随着互联网的普及和发展&#xff0c;网络安全问题日益受到关注&#xff0c;恶意攻击成为网络安全的一大威胁。而IP地址作为网络通信的基础&#xff0c;常常成为恶意攻击的目标之一。本文将探讨如何避免被恶意攻击的IP地址&#xff0c;提高网络安全水平。 1. 定期更新安全补丁 …