尚硅谷Java学习Lecture5

上次的分支结构忘记标记Lecture4了,...,本次的学习笔记还是分支结构的一些学习,包括一些小例子,找最大公约数和最小公倍数,while、do-while、for循环的学习,包括统计正负数的个数例子,通过嵌套循环输出99乘法表以及带标签的break及continue语句的使用,并通过输出给定范围内的质数例子及优化,初步了解算法的重要性。下面是我复现的code:

/*
输入两个正数m、n,求其最大公约数和最小公倍数

*/
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();
		//获取两个数中的较小值
		int min=(m<=n)?m:n;
		int max=(m>n)?m:n;
		int mul=m*n;
		for(int i=min;i>=1;i--)
		{
			if((m%i==0)&&(n%i==0))
			{
				System.out.println("最大公约数为"+i);
				break;//一旦在循环中执行到break就终止循环
			}
			
		}

		for(int i=max;i<=mul;i++)
			{
			if((i%m==0)&&(i%n==0))
				{
				System.out.println("最小公倍数为"+i);
				break;
				}
			}
		
		
	}
}



/*
循环的4个要素
1.初始化条件
2.循环条件:Boolean类型的
3.循环体
4.迭代条件

1;
while(2)
{
	3;
	4;
}
while循环不要丢了循环迭代条件,否则就为死循环
要保证算法的有限性
for循环和while循环可以相互转换
区别:for循环和while循环初始化条件的作用域不同
*/

class WhileTest
{
	public static void main(String[] args)
	{
		//eg:遍历100内的所有偶数
		int i=1;
		while(i<=100)
		{	
			if(i%2==0)
			System.out.println(i);
			i++;
		}
	}
}
/*
do-while循环的使用
循环的4个要素
1.初始化条件
2.循环条件:Boolean类型的
3.循环体
4.迭代条件
循环结构:
1;
do
{
	3;
	4;
}while(2);
执行过程:1->3->4->2->3->4->2...->2 
说明:do-while循环至少会执行一次循环体
*/
 class DoWhileTest
{
	public static void main(String[] args)
	{
		//遍历100以内的偶数,并计算所有偶数的和及偶数的个数
		int i=1;
		int sum=0;
		int count=0;
		do
		{
			if(i%2==0)
			{
				System.out.println(i);
			    sum+=i;
				count++;
			}
				
			i++;
		}
		while (i<=100);
		System.out.println("所有偶数的和为"+sum);
		System.out.println("偶数的个数为"+count);
	}
}


//从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序
//import java.util.Scanner  前面已经导入
//结束循环的方式:方式一:根据循环的终止条件结束  方式二:在循环体中执行break 
//方法一:
class Exe1
{
	public static void main(String[] args)
	{	
		Scanner data=new Scanner(System.in);
		int pNum=0;
		int nNum=0;
		int num;
		System.out.println("请输入数据");
			num=data.nextInt();
		while(num!=0) 
		{	
			if(num>0)
			{
				pNum++;
			}
			else if(num<0)
			{
				nNum++;
			}
			System.out.println("请继续输入数据");
			num=data.nextInt();
		}
		System.out.println("正数的总个数为"+pNum);	
		System.out.println("负数的总个数为"+nNum);	
	}
}
//方法二:
//import java.utill.Scanner 前面已经导入包
class Exe2
{
	public static void main(String[] args)
	{
		Scanner data1=new Scanner(System.in);

		int positiveNumber=0;
		int negativeNumber=0;

		while(true)//等价于for(;;),不可以写while(1 )
		{
			int num=data1.nextInt();
			if(num>0)
			{
				positiveNumber++;
			}
			else if(num<0)
			{
				negativeNumber++;
			}
			else
			{
				break;
			}
		}
		System.out.println("正数的总个数为"+positiveNumber);
		System.out.println("负数的总个数为"+negativeNumber);	

	}
}

/*
嵌套循环的使用:
1.嵌套循环:将一个循环结构声明在另一个循环结构的循环体中
2.内层循环结构循环一遍,外层循环执行一次
外层循环执行m次,内层循环执行n次,完成一共执行m*n次
3.外层循环控制行数,内层循环控制列数
*/
class NestedLoop
{
	public static void main(String[] args)
	{
		/* 输出 :
		******
		******
		******
		******
		*/
		for(int i=1;i<=4;i++)
		{
			for(int j=1;j<=6;j++)
			{
				System.out.print('*');
			}
			System.out.println();
		}
		System.out.println();
		/*
		输出:
		*
		**
		***
		****

		*/
		for(int i=1;i<=4;i++)
		{
			for(int j=1;j<=i;j++)
			{
				System.out.print('*');
			}
			System.out.println();
		}
	}
}
/*
九九乘法表
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
...
9*1=9 ...     ...    9*9=81
*/

class NineNineTable
{
	public static void main(String[] args)
	{
		for(int i=1;i<=9;i++)
		{	for(int j=1;j<=i;j++)
			System.out.print(i+"*"+j+"="+i*j+" ");
			System.out.println();
		}
	}
}

/*
100以内质数的输出及优化
最小的质数为2
*/
class PrimeNumberPrint1
{
	public static void main(String[] args)
	{	
		int count=0;
		long startTime=System.currentTimeMillis();//获取当前时间距1970年1月1号的时间ms数
		//boolean isFlag=true;//标识i是否被j除尽过
		for (int i=2;i<=100000 ;i++ )
		{	
			boolean isFlag=true;//将isFlag设置在此处便不用再重置isFlag
			//for(int j=2;j<i;j++)
			for(int j=2;j<=Math.sqrt(i);j++)//优化2:将中间j的判断条件转换为sqrt(i),两两相乘,;临界值为两个因数相同
			{
				if((i%j)==0)
				{
					isFlag=false;
					break;//优化1:加入break,如果被一个整除,后面就不用再试了,只对本身非质数的自然数有效
				}
					
			}
			if(isFlag==true)
			{
				//System.out.println("数"+i+"为质数");
				count++;
			}
			//isFlag=true;//重置Flag,一个Flag只能去测试一个数
				
		}
		long endTime=System.currentTimeMillis();
		long time=endTime-startTime;
		System.out.println("花费时间为"+time+"ms"); 
		System.out.println("质数的个数为"+count);
		
	}
}

/*
berak和continue关键字的使用
break:循环和switch-case语句 :结束本层循环
continue:循环结构:		   结束本次循环
在break和continue关键字后面不能有执行语句
默认结束最近的一层循环

*/
class BreakContinueTest
{
	public static void main(String[] args)
	{
		for(int i=1;i<=10;i++)
		{
			if(i%4==0)
			{
				break;
			}
			System.out.println(i);
		}
		//只会输出1 2 3
				for(int i=1;i<=10;i++)
		{
			if(i%4==0)
			{
				continue;
			}
			System.out.println(i);
		}
		//输出1 2 3 5 6 7 9 10

		label:for(int i=1;i<10;i++)
		{
			for(int j=1;j<10;j++)
			{
				break label;//跳出的是label的循环,带标签的break的使用
				//continue label;//跳出指定label的当次循环,带标签的continue的使用
			}
		}
	}

}

class PrimeNumberPrint2
{

	public static void main(String[] args)
	{	
		int count=0;
		long startTime=System.currentTimeMillis();
		label: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)
					continue label;
			}
			//能执行到此步都为质数
			count++;
		}
		System.out.println("质数的个数为"+count);
		long endTime=System.currentTimeMillis();
		long time=endTime-startTime;
		System.out.println("花费时间为"+time+"ms"); 
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值