java基础学习day05(流程控制2)

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的循环体中,就构成了嵌套循环

  1. 外层循环:循环结构B
    内存循环:循环结构A
    3.内层循环结构遍历一遍,只相当于外出循环循环体执行了一次

设外层循环需要执行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);
		}

	}
}

你可能感兴趣的:(java核心基础笔记,java)