本文主要内容:
循环结构、特殊关键字break和continue的使用,质数问题的优化
循环结构:Boolean类型
程序编写:
从键盘输入两个正整数m和n,找出他们的最大公约数和最小公倍数。
import java.util.Scanner;
public class test {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入m:");int m = scan.nextInt();System.out.println("请输入n:");int n = scan.nextInt();for(int i = (m<n?m:n);i>0;i--) {if(m%i == 0 && n%i == 0) {System.out.println("最大公约数"+ i);break; //一旦在循环中执行到break,就跳出当前循环}}for(int i = (m<n?n:m);i <= m*n;i++) {if(i%m == 0 && i%n == 0) {System.out.println("最小公倍数是:"+ i);break;}}}
}
1.说明:写while循环千万小心不要丢了迭代条件。一旦丢了迭代条件,很可能导致死循环。我们写程序要避免出现死循环
2.for循环和while循环是可以相互转化的。
3.区别:for循环和while循环的初始化条件部分的作用范围不同。
4.do-while循环至少会执行一次循环体!
5.多次执行时,do-while和while没区别
6.在开发中,使用for和while较多一些,较少使用do-while.
while(true)
说明:1.不在循环条件部分限制次数的结构:for(;;)或者while(true)
2.结束循环有几种方式?
方式一:循环条件部分返回false
方式二:在循环体中,执行break
嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中。
2.外层循环B、内层循环A
for(int i = 0;i<=6;i++){for(int j = 0;j<=4;j++){System.out.print('*')}System.out.println();
}
说明:
1.内层循环结构执行一遍,只相当于外层循环执行了一次。
2.假设外层循环需要执行m次,内层循环需要执行n次,此时内层循环的循环体一共执行了m*n次
for(int i = 0;i<=5;i++){for(int j = 0;j<=i;j++){System.out.print('*')}System.out.println();
}
九九乘法表
100以内所有的质数的输出
质数:也叫素数,只能被1和它本身整除的自然数。
方法一:
for(int i = 2;i<=100000;i++) {boolean isFlag = true; //标识i是否被j整除,一旦整除,修改其值for(int j = 2;j<i;j++) { if(i%j == 0)isFlag = false;}if(isFlag == true) {System.out.println(i);}
}
对质数问题的优化
方法一:
public class test {public static void main(String[] args) {
/*优化前:15393优化一后:1609优化二后: 31*/long start = System.currentTimeMillis(); //获取系统时间的函数,计算了从1970年1月1日00:00:00到现在的时间int count = 0;boolean isFlag = true;for(int i = 2;i<=100000;i++) {//for(int j = 2;j<i;j++) {for(int j = 2;j<Math.sqrt(i);j++) { //优化二,只需要除到开方的位置,对本身质数的自然数有效if(i%j == 0) {isFlag = false;break; //优化一:只对本身非质数的自然数有效}}if(isFlag == true) {//System.out.println(i);count++;}isFlag = true;}long end = System.currentTimeMillis();System.out.println("质数的个数是" + count);System.out.print("运行时间:"+(end-start));}
}
方法二:
public class test {public static void main(String[] args) {long start = System.currentTimeMillis(); //获取系统时间的函数,计算了从1970年1月1日00:00:00到现在的时间int count = 0;label:for(int i = 2;i<=100000;i++) {for(int j = 2;j<=Math.sqrt(i);j++) { //优化二,只需要除到开方的位置,对本身质数的自然数有效if(i%j == 0) {continue label;}}count++;}long end = System.currentTimeMillis();System.out.println("质数的个数是" + count);System.out.print("运行时间:"+(end-start)); }
}
break和continue默认跳出包括此关键字最近的一层循环
结束最外层循环的方法:
return的使用
完数:一个数恰好等于它的因子之和,这个数就称为完数,例如6=1+2+3