引用变量时要给变量赋值,如果循环进不去就会报错。
一、循环结构的四要素
1.初始化条件
2.循环条件 ---> 是Boolean类型
3.循环体
4.迭代条件
说明:通常情况下,循环结束都是因为2中条件返回false了。
二、for循环
eg:题目:输入两个正整数m和n,求其最大公约数以及最大公倍数。
比如:12和20的最大公约数是4,最小公倍数是60.
说明:break关键字的使用
import Java.util.Scanner;
class ForTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //实例化
System.out.println("请输入第一个正整数:");
int m = scan.nextInt();
System.out.println("请输入第二个正整数:");
int n = scan.nextInt();
//获取最大公约数
//1.获取两个数中的较小值
int min = (m < n) ? m : n;
//2.遍历
for (int i = min; i >= 1; i--) {
if (((m % i) == 0) && ((n % i) == 0)) {
System.out.println("最大公约数为:" + i); //如果没有break就输出 4,2,1
break; //一旦循环执行到break,就跳出循环。
}
}
//获取最小公倍数
//1.获取两个数中的较大值
int max = (m >= n) ? m : n;
//2.遍历
for (int i = max; i <= (m * n); i++) {
if (((i % m) == 0) && ((i % n) == 0)) {
System.out.println("最小公倍数:" + i);
break;
}
}
}
}
二、while循环
说明:写while循环千万小心不要丢了迭代条件。一旦丢失,就可能导致死循环。
for循环和while循环是可以相互转换的。
class WhileTest {
public static void main(String[] args) {
//遍历100以内的偶数
int i = 1;
while (i <= 100) {
if ((i % 2) == 0) {
System.out.println(i);
}
i++;
}
//出了while循环依然可以调用
System.out.println(i); //101
}
}
三、do-while循环
说明:do-while循环至少会执行一次循环体。
开发中使用较少。
class DoWhileTest {
public static void main(String[] args) {
//遍历100以内的偶数,并求和以及得出个数
int num = 1;
int sum = 0;
int count = 0;
do {
if ((num % 2) == 0) {
System.out.println(num);
sum += num;
count++;
}
num++;
} while (num <= 100);
System.out.println("总和为:" + sum);
System.out.println("个数为:" + count);
}
}
四、综合
题目:从键盘读入个数不确定的整数,并判断读入正数和负数的个数,输入为0时结束程序。
说明:
1.不在循环条件部分限制次数的结构:for(;😉 或 while(true)
2.结束循环循环的两种方式:循环条件部分返回false 和 在循环体中,执行break
import Java.util.Scanner;
class ForWhileTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //实例化
int positiveNumber = 0; //记录正数的个数
int negativeNumber = 0; //记录负数的个数
while (true) { //如果用for可以写成 for(;;){ ... 效果相同
int number = scan.nextInt();
//判断number的正负情况
if (number > 0) {
positiveNumber++;
} else if (number < 0) {
negativeNumber++;
} else {
//一旦执行到break,跳出循环。
break;
}
}
System.out.println("输入的正数个数为:" + positiveNumber);
System.out.println("输入的负数个数为:" + negativeNumber);
}
}
五、嵌套循环的使用
将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
例一:九九乘法表
class NineNineTable {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "");
}
System.out.println();
}
}
}
例二:100000以内所有质数的输出。 质数即素数,只能被1和它本身整除
class PrimeNumberTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();//起始时间
for (int i = 2; i <= 100; i++) { //遍历100000以内的自然数
boolean isFlag = true; //标识i是否被j除尽,一旦除尽,修改其值
for (int j = 2; j < i; j++) { //j被i整除---优化2:将j < i 改成 j <= Math.sqrt(i)
if ((i % j) == 0) { //i被j除尽
isFlag = false;
break;//优化1:只对本身非质数的自然数是有效的
}
}
if (isFlag == true) {
System.out.println(i);
}
}
long end = System.currentTimeMillis();
System.out.println("该程序执行完所花费时间为:" + (end - start) + "ms");
}
}
六、break 和 continue 关键字的使用
break:使用在 switch-case 和 循环结构 中。-----作用:结束当前循环
continue:只使用在循环结构中。-----作用:结束当次循环
相同点:关键字后面不能声明执行语句。
class BreakContinueTest {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if ((i % 4) == 0) {
//break;//输出:1 2 3
continue; //输出:1 2 3 5 6 7 9 10
}
System.out.print(i);
}
System.out.println("\n");
//***************************************
label: for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 10; j++) {
if ((j % 4) == 0) {
//break;//默认跳出此关键字最近一层循环。
//continue;
//break label;//结束指定标识的一层循环结构
continue label; //结束指定标识的的一层循环结构的当次循环
}
System.out.print(j);
}
}
}
}