Java入门第五天


前言

本次主要复习for循环、while循环、do-while循环。


一、For循环

1.1 for循环的使用

For循环的使用

  1. 循环结构的四个要素:
    ①初始化条件
    ②循环条件
    ③循环体
    ④迭代条件
  1. for循环的结构:
for(初始化条件;循环条件;迭代条件)[
		循环体;
}
  1. 执行过程:① --> ② --> ③ --> ④ --> ② --> ③ --> …

1.2 for循环练习

import java.util.Scanner;
class ForTest {
	public static void main(String[] args){
		for(int i = 1;i <= 5;i++){
			System.out.println("HelloWorld!");
		}//这里的i是在for循环内定义的,旨在for循环大括号内有用,出了括号就
		//无法调用了,所以下面可以重复定义i


		//练习
		int num = 1;
		for(System.out.print('a'); num <= 3; System.out.print('c'),num++){
			System.out.print('a');
		}//输出结果:abcbcbc
	
		System.out.println();//换行

		
		//例题:遍历100以内的偶数,输出所有的偶数的和,输出偶数的个数
		int sum = 0;	//sum记录所有偶数的和
		int count = 0;	//count记录所有偶数的个数
		for(int i = 0;i <= 100;i++){
			if(i % 2 == 0){
				System.out.println(i);
				sum += i;
				count++;
			}
		}
		System.out.println("总和为:" + sum);
		System.out.println("总个数为:" + count);


		/*
		例题2:编写程序从1循环到150,并在每行打印一个值,另外在每个3的
		倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的、
		倍数行上打印输出“baz”
		*/
		for(int i = 1;i <= 150;i++){
			//每行打印一个值
			System.out.print(i + "\t");

			//每个3的倍数行上打印出“foo”
			if(i % 3 == 0){
				System.out.print("foo" + "\t");
			}
			
			//每个5的倍数行上打印“biz”
			if(i % 5 == 0){
				System.out.print("biz" + "\t");
			}
			
			//每个7的倍数行上打印“baz”
			if(i % 7 == 0){
				System.out.print("baz" + "");
			}
			
			//每输出完整的一个数字和字母之后换行
			System.out.println();
		}


		
		/*
		例题3:输入两个正整数m和n,求其最大公约数和最小公倍数。
			   比如:12和20的最大公约数是4,最小公倍数是60。
			   说明:break关键字的使用
		*/
		Scanner scan = new Scanner(System.in);

		//输入两个正整数m和n
		System.out.print("情输入正整数m:");
		int m = scan.nextInt();
		System.out.print("情输入正整数n:");
		int n = scan.nextInt();

		//求其最大公约数
			/*
			最大公约数,从m和n两者之间较小的开始(假设m == 12,n == 20),此时循环初始化条件为i == 12,
			每次循环i都要减小1,直到i == 1为止,那么当i减小到两者的最大公约数的时候,输出最大公约数,循环停止
		*/
		int temp = (m < n)? m : n;
		for(int i = temp;i > 0;i--){
			if((m % i == 0) && (n % i == 0)){
				System.out.println("最大公约数为:" + i);
				break;//找到之后直接退出循环
			}
		}

		//求最小公倍数,思路和求最大公约数同理,不再赘述
		int temp1 = (m > n)? m : n;
		for(int j = temp1;j <= (m * n);j++){
			if((j % m == 0) && (j % n == 0)){
				System.out.println("最小公倍数为:" + j);
				break;//找到之后直接退出循环
			}
		}


		//找到1000以内的完数
		int sum = 0;
		int count = 0;
		for(int i = 1;i <= 1000;i++) {
			
			for(int j = 1;j <= i/2;j++) {//此处自己写的是j < i,过于冗余
				if(i % j == 0) {
					sum += j;
				}
			}
			
			if(sum == i) {
				System.out.println(i + "是完数;");
				count++;
			}
			
			//重置sum(这一步我给忘了,程序能运行,但不能不能正确运行)
			sum = 0;
		}
		if(count == 0) {
			System.out.println("没有完数");
		}
		System.out.println();


		//控制台输出

		/*		i	j	i+j
		*****	1	5	 6
		****	2	4
		***		3	3
		**		4	2
		*		5	1
		*/
		for(int i = 1;i <= 5;i++) {
			for(int j = 1;j <= 6-i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

二、while循环、do-while循环

2.1 while循环时使用

①初始化部分
while(②循环条件部分){
③循环体部分;
④迭代部分;
}

执行过程:
①-②-③-④-②-③-④-②-③-④-…-②
说明:
①注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
②for循环和while循环可以相互转换

2.2 do-while循环

①初始化部分;
do{
③循环体部分
④迭代部分
}while(②循环条件部分);

执行过程:
①-③-④-②-③-④-②-③-④-…②
说明:
do-while循环至少执行一次循环体。

循环语句综合例题:

/*
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入
为0时结束程序。
(说明:最简单“无限” 循环格式:while(true) , for(;;),无限循环存在的原因是并不
知道循环多少次,需要根据循环体内部某些条件,来控制循环的结束。)
*/
import java.util.Scanner;
class CycleExer {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int countPositive = 0;//读入正数个数
		int countNegative = 0;//读入负数个数
		
		//首先接收一个数字
		int num = scan.nextInt();
		for(;;) {
			//如果是0则直接结束程序,结束之前将正负个数输出
			if(num == 0) {
				System.out.println("正数的个数为:" + countPositive);
				System.out.println("负数的个数为:" + countNegative);
				System.exit(0);
			}
			
			//如果不是0,开始判断正负并计数
			//上面已经判断过等于0的情况,所以这里只有大于、小于的情况了
			if(num > 0) {
				countPositive++;
			}else {
				countNegative++;
			}

			//继续接收数字
			num = scan.nextInt();
		}
	}
}


三、嵌套循环

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的
    循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开
    始下一次的循环。
  3. 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
/*
	输出九九乘法表
	1 * 1 = 1	
	2 * 1 = 2	2 * 2 = 4
	3 * 1 = 3	3 * 2 = 6	3 * 3 = 9
	......
*/

//下面是具体思路
/*
	首先外层循环控制输出的行数,内层循环控制输出列数,其实和输出 “ * ” 组成的图案一个样子,只是将 “ * ” 换成具体的表达式而已
*/
class MultiplicationTables {
	public static void main(String[] args) {
		//因为九九乘法表一共有九行,所以最外层控制输出九行
		for(int i = 1;i <= 9;i++) {
			//内层控制列数,第一次输出一列 1 * 1 = 1,第二列输出 2 * 1 = 2	2 * 2 = 4,惊讶地发现,每行输出的结果数量,是和
			for(int j = 1;j <= i;j++) {
				System.out.print(i + "*" + j + "=" + (i * j) + "\t");
			}
			System.out.println();//每一行的内容输出完之后就换行
		}
	}
}

输出结果:(我真厉害!一次成功啦啦啦~~)
在这里插入图片描述

四、特殊关键字:break,continue

4.1 break语句

  1. break语句用于终止某个语句块的执行;
  2. break语句出现在多层嵌套的语句块中时,可以通过标签指定要终止的是哪一层语句块。
//1.终止某个语句块
{
	......
	break;
	......
}

//2.终止指定标签的语句块
label1 : {
label2 :	{
label3 :		{
					......
					break label2;//终止label2指定的语句块
					......
				}
			}
		 }

break举例:

public class BreakTest{
	public static void main(String[] args){
		for(int i = 0;i < 10;i++){
			if(i == 3){
				break;
			}
			System.out.println("i = " + i);
		}
		System.out.println("Game Over!");
	}
}
/*
输出结果:
i = 0
i = 1
i = 2
Game Over!
*/

4.2 continue语句

continue只能在循环中使用
continue用于跳过其所在循环语句块的一次执行(注意是一次),继续下一次循环
continue出现在多层嵌套循环中,可以通过标签指定要跳过的是哪一层循环

continue举例:

public class ContinueTest{
	public static void main(String[] args){
		for(int i = 0;i < 100;i++){
			if(i % 10 == 0){
				continue;
			}
			System.out.println(i);
		}
	}
}
/*
输出结果:输出0-99中除10以及10的倍数外的所有整数
0
1
2
...
9
11
...
19
21
...

4.3 附加特殊流程控制语句

return:

  1. 并非专门用于循环结束,它的功能时结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。

  2. 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内

五、总结

  1. break只能用于switch语句和循环语句中
  2. continue只能用于循环语句中
  3. 二者功能类似,但continue是终止本次循环,break是终止本层循环
  4. break、continue之后不嗯能够有其他的语句,因为程序永远不会执行其后的语句(换句话说,加也行,但是不执行,等于做无用功)
  5. 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句前面
  6. 很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但是程序容易出错。Java中的break和continue是不同于goto的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值