For循环结构的使用
一、四个要素
1.初始化部分
2.循环条件 (一定是boolean类型)
3.循环体
4.迭代条件
二、for循环结构
for(1;2;4){
3
}
执行过程:1 - 2 - 3 - 4 - 2 - 3 - 4 - ...-2
//import java.util.Scanner;
class ForTest{
public static void main(String[] args){
//Scanner scan = new Scanner(System.in);
for(int i = 1;i <= 5;i++){
System.out.println("Hello World");
}
//练习:
int num = 1;
for(System.out.print("a");num <= 3;System.out.print("c"),num++){
System.out.print("b");
}
//输出结果为 abcbcbc
//例题:便利100以内的偶数,输出所有偶数的和
int sum = 0; //记录所有偶数的和
int count = 0;//记录偶数的个数
for(int i = 1;i <= 100;i++){
if(i % 2 == 0){
System.out.println(i);
sum += i;
count++;
}
}
System.out.println("总和为" + sum);
System.out.println("个数为" + count);
}
}
例题:循环1-150.3的倍数foo,5的倍数biz,7的倍数baz
import java.util.Scanner;
class ForTest1{
public static void main(String[] args){
for(int i = 1;i <= 150;i++){
System.out.print(i);
if(i % 3 == 0){
System.out.print(" foo");
}
if(i % 5 == 0){
System.out.print(" biz");
}
if(i % 7 == 0){
System.out.print(" baz");
}
System.out.println();
}
}
}
例题:输入俩个正整数,求最大公约数和最小公倍数
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;
//遍历
for(int i = min;i >= 1;i--){
if(m % i == 0 && n % i == 0){
System.out.println("最大公约数为:" + i);
break;//一旦在循环中执行到break,就跳出循环
}
}
//获取最小公倍数
//1.获取俩个数中的最大值
int max = (m <= n) ? n : m;
//遍历
for(int i = max;i <= m * n;i++){
if(i % m == 0 && i % n == 0){
System.out.println("最小公倍数为:" + i);
break;//一旦在循环中执行到break,就跳出循环
}
}
while循环
一、四个要素
1.初始化部分
2.循环条件 (一定是boolean类型)
3.循环体
4.迭代条件
二、结构:
1
while(2){
3;
4;
}
执行过程:1-2-3-4-2-3-4-…2
说明:
1.写while循环千万小心不要丢了迭代条件,一旦丢了,就可能导致死循环
2.要避免死循环(算法:有限性)
3.for循环和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++;
}
}
}
do-while循环
一、四个要素
1.初始化部分
2.循环条件 (一定是boolean类型)
3.循环体
4.迭代条件
二、结构
1
do{
3;
4;
}while 2;
执行工程:1-3-4-2-3-4-2-3-4...-2
说明:do-while至少会执行一次循环体
开发中使用for和while多一些,较少使用do-while
1.不在循环条件部分限制次数的结构:for(;;)或 while(true)
2.结束循环有几种方式:
(1)循环条件部分返回false
(2)在循环体中,执行break
class DoWhileTest{
public static void main(String[] args){
int sum = 0;
int count = 0;
int num = 1;
do{
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++;
}while (num <= 100);
System.out.println("总和为:" + sum);
System.out.println("个数为:" + count);
}
}
嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在一个循环结构B的循环体中,就构成了嵌套循环
设外层循环需要执行m次,内存循环体需要执行n次,此时内层循环的循环体一共执行了m*n次
4.技巧
外层循环控制行数,内层循环控制列数
class ForForTest{
public static void main(String[] args){
for(int j = 1;j <= 4;j++){
for(int i = 1;i <= 6;i++){
System.out.print('*');
}
System.out.println('*');
}
/*
*
**
***
****
*****
*/
for(int i = 1;i <= 5;i++){
//控制行数
for(int j = 1;j <= i;j++){
//控制列数
System.out.print('*');
}
System.out.println();
}
}
}
例题:判断100000以内的质数
方法一:
long start = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
boolean isFlag = true; //标识i是否被j除尽,一旦除尽,修改其值
for(int i = 2;i <= 100000; i++){
//遍历100000以内的自然数
for(int j = 2;j < i;j++){
//j:被i去除
if(i % j == 0){
//i被j除尽
isFlag = false;
}
}
if(isFlag == true){
System.out.println(i);
}0
isFlag = true; //重置isFlag
}
long end = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
System.out.println("花费的时间为:" + (start - end)); // 37322
//方法一的优化
long start = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
boolean isFlag = true;
for(int i = 2;i <= 100000; i++){
for(int j = 2;j < i;j++){
if(i % j == 0){
isFlag = false;
break; // 例如一百,就不用每个都除了,除到2就停止了(只对本身非指数的自然数是有效的)
}
}
if(isFlag == true){
System.out.println(i);
}
isFlag = true;
}
long end = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
System.out.println("花费的时间为:" + (start - end)); //7061
//优化二 对本身是质数的自然数是有效的
long start = System.currentTimeMillis();
boolean isFlag = true;
for(int i = 2;i <= 100000; i++){
for(int j = 2;j < Math.sqrt(i);j++){
// Math.sqrt(i) 开方
if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag == true){
System.out.println(i);
}
isFlag = true;
}
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (start - end)); //2108
//如果不输出数字 输入个数的话 会更快
//方式二:用带标签的break和continue
}
}
break和continue关键字的使用
break:使用范围:使用在switch-case和循环结构中
不同:循环中使用的作用是结束当前循环
continue:使用范围:循环结构中
不同:循环中使用的作用是结束当次循环
相同点:关键字后面不能声明执行语句
class BreakTest{
public static void main(String[] args){
for(int i = 1;i <= 10;i++){
if(i % 4 == 0){
//break; //123
continue; //123567910
}
System.out.println(i);
}
}
}