循环结构
概念:通过某个条件,重复执行的一段逻辑代码
循环的实现方式:while,do…while,for
使用循环的注意事项:避免出现死循环 一定要有结束循环的条件
使用循环所要思考的问题:
- 重复做的事情是什么?
- 哪些数据是变化的?
循环三要素:
- 循环的执行条件
- 循环的终止条件
- 循环执行的代码
while,do…while,for的使用区别:
- while和do…while一般在循环次数不明确的情况下使用,而for一般在循环次数明确的情况下使用。
- do-while和while区别仅在于,while先执行循环条件判断再执行循环体,do-while先执行循环体后进行条件判断。
1. while循环
while的语法:
while(循环条件){
//循环体
}
执行流程:
- 先对循环条件进行判断,结果为true,则执行循环体
- 本次循环执行完毕后,再次进行判断,结果仍旧为true,则再次循环体
- 直至循环条件的结果为false时,退出循环,执行后续代码
例题:
import java.util.Scanner;
/**
* @标题: 例题1
* @项目名 章节4
* @项目描述: 用while循环 设用户名变量yongHuMing的值为yaojiawen,
* 接受一个字符串并判断用户名是否正确,不正确则重新输入。
* @创建人 yaojiawen
* @创建时间 2021/3/2717:31
*/
public class LiTi1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String yongHuMin = "yaojiawen";
System.out.println("请输入用户名:");
String num = input.next();
while (!yongHuMin.equals(num)) {
System.out.println("用户名输入不正确,请重新输入!");
System.out.println("\n请输入用户名:");
num = input.next();
}
System.out.println("输入正确!");
}
}
2. do…while循环
do…while的语法:
do{
//循环体
}while(循环条件);
执行流程:
- 先执行一次循环体之后,在进行循环条件判断
- 如果结果为true,则再次执行循环体
- 如果结果为false,退出循环,执行后续代码
例题:
import java.util.Scanner;
/**
* @标题: 例题2
* @项目名 章节4
* @项目描述: 用do...while循环 设用户名变量yongHuMing的值为yaojiawen,
* 接受一个字符串并判断用户名是否正确,不正确则重新输入。
* @创建人 yaojiawen
* @创建时间 2021/3/2717:51
*/
public class LiTi2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String yongHuMin = "yaojiawen";
String num;
do {
System.out.println("\n请输入数据:");
num = input.next();
if (yongHuMin.equals(num)) {
System.out.println("输入正确!");
break;
} else {
System.out.println("用户名输入不正确,请重新输入!");
}
} while (true);
}
}
3. for循环
for的语法:
for([表达式1];循环条件;[表达式3]){
//循环体
}
执行流程:
- 首次执行表达式1(仅一次)
- 对循环条件进行判断,结果为true,则执行循环体
- 本次执行完毕后,执行表达式3,执行循环条件,结果仍旧为true,则再次执行循环体
- 直至循环条件的结果为false时,才会退出循环结果,执行后续代码
例题:
/**
* @标题: 例题3
* @项目名 章节3
* @项目描述: 用for循环计算从1加到100的和
* @创建人 yaojiawen
* @创建时间 2021/3/2719:50
*/
public class Liti4 {
public static void main(String[] args) {
int num = 0;
for (int a = 1; a <= 100; a++) {
num += a;
}
System.out.println("从1加到100的和为:" + num);
}
}
4. 循环的嵌套
故名思义就是在一个完整的循环结构中,嵌套另一个完整的循环结构
注意:外层控制循环次数,内层控制单次循环操作
**例题:**打印一张乘法口诀表,如下图所示
/**
* @标题: 例题4
* @项目名 章节3
* @项目描述: 打印一张乘法口诀表
* @创建人 yaojiawen
* @创建时间 2021/3/2717:25
*/
public class LianXi2 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++)
System.out.print("\t" + j + "*" + i + "=" + i * j);
System.out.println();
}
}
}
5. 关键字
1. break
必须与switch或循环语句进行结合使用。 遇见break,结束(跳出)switch或者循环语句
例题:
import java.util.Scanner;
/**
* @标题: 例题5
* @项目名 章节3
* @项目描述: 使用break 接受数字当数字为两位数时输出,否则输入错误重新输入。
* @创建人 yaojiawen
* @创建时间 2021/3/2720:50
*/
public class LiTi6 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
while (true) {
System.out.println("\n请输入:");
num = input.nextInt();
if (num >= 10 && num < 100) {
System.out.print("输入的两位数为:" + num);
break;
}
System.out.println("输入错误请重新输入:");
}
}
}
2. continue
只能运用在循环语句: 跳过本次循环,执行下一轮循环
例题:
/**
* @标题: 例题6
* @项目名 章节3
* @项目描述: continue的使用 输出1-100的奇数,但范围在30-80中的数不输出。
* @创建人 yaojiawen
* @创建时间 2021/3/2718:19
*/
public class LiTi3 {
public static void main(String[] args) {
for (int a = 1; a <= 100; a++) {
if (a % 2 == 0) continue;
if (a >= 30 && a <= 80) continue;
System.out.print(" " + a);
}
}
}
3. return
可以使用在程序的任意地方,遇见return 整个逻辑(方法)就结束
return的使用语法:
return;
return 数据; //有返回值的方法中
例题:
import java.util.Scanner;
/**
* @标题: 例题7
* @项目名 章节3
* @项目描述: 使用return 输入密码,输入不正确则重新输入,但只有n次输入机会,当第n次都没输入正确就退出程序!
* @创建人 yaojiawen
* @创建时间 2021/3/2721:12
*/
public class LiTi7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = 3;
int a = 0;
String miMa = "123456";
System.out.println("请输入密码:");
while (true) {
String q = input.next();
if (a >= n - 1) {
System.out.println("输入次数过多!");
return;
}
if (q.equals(miMa)) break;
System.out.println("输入不正确!请重新输入:");
a++;
}
System.out.println("输入正确!");
}
}
6. 练习
练习1
题目1:波那契数是由1,1,2,3,5…等,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个feBoNa(int num)方法接受一个整数参数并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。
import java.util.Scanner;
/**
* @标题: 练习1
* @项目名 章节3
* @项目描述: 斐波那契数是由1,1,2,3,5...等,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个feBoNa()
* 方法接受一个整数参数并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。
* @创建人 yaojiawen
* @创建时间 2021/3/2715:43
*/
public class LianXi1 {
static void feBoNa(int num) {
int a = 1;
int b = 1;
int jh;
System.out.print(a);
for (int c = 0; c < num - 1; c++) {
System.out.print(" " + b);
jh = a;
a = b;
b = jh + b;
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num = input.nextInt();
feBoNa(num);
}
}
练习2
题目2:输入任意一个奇数(代表行数),打印出如下图形
import java.util.Scanner;
/**
* @标题: 练习2
* @项目名 章节3
* @项目描述: 输入任意一个奇数,打印图形
* @创建人 yaojiawen
* @创建时间 2021/3/2719:59
*/
public class LiTi5 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入数字:");
int num = input.nextInt();
for (int a = 0; a < num; a++) {
if (a < num / 2) {
for (int b1 = num / 2 - a; b1 > 0; b1--)
System.out.print(" ");
for (int b2 = 0; b2 < a * 2 + 1; b2++)
System.out.print("*");
System.out.println();
} else if (a == num / 2) {
for (int c = 0; c < a * 2 + 1; c++)
System.out.print("&");
System.out.println();
} else {
for (int d1 = 0; d1 < a - num / 2; d1++)
System.out.print(" ");
for (int d2 = (num / 2 - (a - num / 2)) * 2 + 1; d2 > 0; d2--) //(9/2-(a-9/2))*2+1
System.out.print("*");
System.out.println();
}
}
}
}
练习3
题目3:找规律并得出最终结果2✕5=10,4✕10=40,6✕15=90 … ?✕100=?
/**
* @标题: 练习4
* @项目名 章节3
* @项目描述: 找规律并得出最终结果2✕5=10,4✕10=40,6✕15=90 .... ?✕100=?
* @创建人 yaojiawen
* @创建时间 2021/3/2814:00
*/
public class LianXi3 {
public static void main(String[] args) {
for(int a=2,b=5;b<=100;a+=2,b+=5)
System.out.println(a+"*"+b+"="+a*b);
}
}
练习4
题目:输入当前日期计算2000.1.1距离今天多少天?
import java.util.Scanner;
/**
* @标题: 练习4
* @项目名 章节3
* @项目描述: 输入当前日期计算2000.1.1距离今天多少天?
* @创建人 yaojiawen
* @创建时间 2021/3/2814:19
*/
public class LianXi4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年月日:");
int nian = input.nextInt();
int yeu = input.nextInt();
int ri = input.nextInt();
int sum = 0;
for (int a = 2000; a < nian; a++) //计算2000年距今多少天
{
if (a % 400 == 0 || (a % 4 == 0 && a % 100 != 0)) //判断闰年和平年
{
sum += 366; //闰年366天
continue;
}
sum += 365; //平年365天
}
for (int a = 1; a < yeu; a++) //判断今年距今月多少天
{
switch (a) { //没必要计算12月因为a<yeu使得a的值最大为11
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
sum += 31;
break;
case 2:
if (nian % 400 == 0 || (nian % 4 == 0 && nian % 100 != 0)) sum += 29;
else sum += 28;
break;
default:
sum += 30;
}
}
sum+=ri-1;
System.out.println("距今"+sum+"天!");
}
}