Java第二十二篇:详述嵌套for循环执行顺序,小白看了也能懂

嵌套for循环执行步骤:

1.先判断最外层循环条件,若满足条件则进入第一层循环体;

2.进入第一层循环体后进行第二层循环条件判断,若满足判断条件,进入第二层循环体;

3.由内而外执行循环体操作;

4.执行完第一次内循环体操作后,进行内循环体变量累加,再次执行内循环体操作,直到不满足进入内循环体条件为止;

5.执行外循环体操作;

6.在第一次外循环体操作完成后,外循环体变量累加,回到步骤1,判断是否满足进入外循环体条件,若满足条件,再次依次执行上述步骤,直到不满足进入外循环体条件为止;

7.彻底退出嵌套循环操作。

下面我们通过例子来加深理解:

//实现功能:打印1到100之间所有的质数
public class Study {
	public static void main(String args[]){ 
		int i = 0; //局部变量初始化
		int j = 0;
		int count=0;//记录素数个数
		for(i=1; i <=100; i++) { //记录需要进行判断的数
			for (j=2; j <=i; j++) {  //判断该数是否为素数
				if(i==1){
	                //1既不是素数也不是偶数
					break;
	            }
				if (i % j== 0) {
					break; 
				}
			} 
			if(j==i) { 
				System.out.print(i+" ");//输出素数
				count++;//次数自增
			}
		}
		System.out.println();
		System.out.println("1到100之间素数的个数为:"+count+"个");
	}
}

结果如下:
在这里插入图片描述
过程详细分析:

1.先定义变量i并赋值为1,即i=1,i<=100,满足最外层循环条件,进入第一层循环体;

2.进入第一层循环体后进行第二层循环条件判断:定义局部变量j=2,j<=i(此时i=1,j=2,不满足判断条件,退出第二层循环;

3.接着判断j是否等于i,这里显然i不等于j(i=1,j=2,最后i++,即i=i+1,此时i=2,i<=100,满足第一层循环条件,进入第一层循环体;

4.进入第一层循环体后进行第二层循环条件判断:,j<=i(此时i=2,j=2,满足判断条件,进入第二层循环;

5.判断i是否等于1,是的话就跳出第二层循环(break只能跳出一层循环),否的话接着往下执行,判断i模j是否为0(注意一个等号是赋值,两个等号才是数值相等,这里表达的意思是i能否整除j),这里i和j的数值均为2,满足条件,跳出第二层for循环,(局部变量j不会自增,break跳出后后面的代码不会被执行),接着执行下面的语句,判断j是否等于i,显然这里i=2,j=2,满足条件,输出素数i,打印次数count,接着变量i++(此时i=3;

6.i=3,i<=100,满足第一层循环条件,进入第一层循环中,开始第二层循环,这里j还是等于2,j=2<=i=3,满足条件,进入
内层循环内部,i=3,不满足i=1,不进if语句内部,2%3!=0,不进if语句内部;

7.此时局部变量j++,即j=3,后序同步骤4,步骤5原理相同,这里不再赘述;

8.接着局部变量i++.此时i=4,i<=100,进入第一层循环体,此时j=2,不是根据上面的值来进行判断的(上面的步骤中j=3,这点要特别注意);

9.j=2<=i=4,满足条件,接着进行if语句判断,不满足,接着进行下一个if语句判断,4%2==0满足条件,break,但此时j=2,i=4,j!=i,不打印,即4不是素数,局部变量i++,此时i=510.后续步骤和步骤一开始原理相通。

附加说明:
在这里插入图片描述
这里i=4,j=2就说明不会将4打印出来,因为满足不了i==j。
总结:对于素数的判断,想当于用n去除以n-1,n-2…2这些数,如果有能被整除的,则说明该数不是素数。九九乘法表也是如此,感兴趣的同学可以去研究研究,加深对知识的理解。
对break跳转语句不熟的同学请参考这篇博文进行学习:break、continue、return之间的区别

有疑问欢迎留言!

点个赞,加个关注呗!嘿嘿!

  • 16
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: makefile 中的 patsubst 函数是用来批量替换字符串的一个工具。它的语法如下: ``` $(patsubst pattern,replacement,text) ``` - pattern:需要被替换的字符串的模式。 - replacement:替换的字符串。 - text:需要被处理的字符串。 例如: ``` objects = file1.o file2.o file3.o all: $(objects) %.o: %.c gcc -c $< -o $@ clean: rm -f $(objects) ``` 在这个例子中,我们使用 patsubst 函数来删除 .o 文件: ``` clean: rm -f $(patsubst %.o,%,$(objects)) ``` 这样,makefile 就会调用 rm 命令删除 file1 file2 和 file3 这三个文件,而不是删除 .o 文件。 ### 回答2: 在 Makefile 中,patsubst 是一个内置的字符串替换函数,可以用于对模式匹配的字符串进行替换。 具体用法如下: ```makefile # 定义一个变量 SOURCE_FILES = src/main.c src/utils.c src/foo.c # 使用patsubst进行替换 OBJECT_FILES = $(patsubst src/%.c,obj/%.o,$(SOURCE_FILES)) # 输出替换结果 all: @echo $(OBJECT_FILES) ``` 在上面的例子中,我们使用了 patsubst 函数来将源文件路径转换为目标文件路径。 `src/%.c` 表示源文件的模式,其中 `%` 是通配符,表示任意字符串,并且使用 `.c` 进行匹配。 `obj/%.o` 表示目标文件的模式,我们可以看到,这里也使用了 `%` 通配符,并使用 `.o` 进行匹配。 通过在 patsubst 函数中使用这两个模式,我们可以将 `SOURCE_FILES` 变量中的源文件路径替换为目标文件路径。 以上面的例子为例,假设 `SOURCE_FILES = src/main.c src/utils.c src/foo.c`,则经过 patsubst 函数处理后,`OBJECT_FILES` 的值将变为 `obj/main.o obj/utils.o obj/foo.o`。 通过这样的替换,我们可以方便地将源文件的路径转换为目标文件的路径,从而方便地进行编译和链接操作。 ### 回答3: makefile 是一种用于构建程序的工具,它可以帮助我们管理项目中的文件依赖关系和编译过程。patsubst 是 makefile 中的一个函数,用于进行模式替换。 patsubst 函数的作用是根据给定的模式,对字符串进行替换。它的语法如下: $(patsubst pattern,replacement,text) 其中,pattern 是要匹配的模式,replacement 是要替换的内容,text 是要进行替换的字符串。 举个例子来说明,假设我们有一个变量: files := file1.c file2.c file3.c 我们想要替换这些文件的扩展名为 .o,可以使用 patsubst 函数来完成: objects := $(patsubst %.c,%.o,$(files)) 在上面的例子中,%.c 表示任意以 .c 结尾的字符串,%.o 表示将匹配到的字符串替换为以 .o 结尾。通过对 files 变量中的每一个字符串应用 patsubst 函数,我们得到了一个新的变量 objects,其中的字符串经过替换后,变成了 file1.o file2.o file3.o。 这个函数在 makefile 中的应用非常广泛。比如,我们可以使用 patsubst 函数来生成源码文件对应的目标文件名,或者从文件列表中过滤出满足特定条件的文件名等等。 需要注意的是,patsubst 函数只负责替换文件名的部分,而不会改变路径部分。如果想要同时替换路径和文件名,可以使用另外一个函数 called $(subst pattern,replacement,text)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值