java学习笔记04--流程控制

1、流程控制

顺序(从上到下)、分支(if-else switch-case)、循环结构(for while do-while)

从键盘获取数值:Scanner
导包:import java.util.Scanner
Scanner的实例化 Scanner scan = new Scanner(System.in);
调用Scanner类的相关方法,来获取指定类型的变量 next()/nextXxx()
String类型scan.next(),其他类型scan.nextXxx(),比如scan.nextInt()
对于char的获取,Scanner没有提供相关的方法,只能获取一个字符串。char genderChar = gender.charAt(0),获取首字符
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,报异常:InputMatchException,导致程序终止

随机数的获取:
公式[a,b]:(int)(Math.random()*(b-a+1)+a)
double value = Math.random()//[0.0-1.0]
double value = (int)(Math.random()*90+10)//[10-99]

2、if-else;

if(条件表达式){
执行代码块;
}
if(条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
if(条件表达式1){
执行代码块1;
}
else if(条件表达式2){
执行代码块2;
}
else{
执行代码块3;
}

else结构是可选的
针对条件表达式:如果多个表达式之间是互斥关系(没有交集),判断和执行语句声明顺序可换
如果多个表达式之间有交集的关系,需根据实际情况,要考虑判断和执行语句的顺序
如果多个表达式之间有包含关系,把范围小的声明在范围大的上面,否则,范围小的声明没机会执行
if-else结构可嵌套,执行语句只有一行,{}可省
ishandsome.equals(“是”)//字符串判断语句

3、switch结构:

switch(表达式){
case 常量1:
语句1;//break;
case 常量2:
语句2;//break;
default:
语句;//break;}

根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则执行相应case语句。当调用完执行语句,继续向下执行,直到遇到break或到结束为止
break可使用switch-case结构中,与此表示跳出switch-case结构。根据情况选择是否写break
switch结构中的表达式,只能是以下六种数据类型之一:byte、short、char、int、枚举类型、String
case后只能跟常量,不能跟判断语句,禁止写范围
default相当于if-else中的else,位置可选,一般位于最后边
如果多个case中执行语句一致,可进行合并

凡是可以使用switch-case的结构都可以转换为if-else,反之不成立
当switch-case(case情况不多)和if-else都可使用时,优先使用switch-case,因为它执行效率较高

循环语句组成部分:初始化、循环条件、循环体、迭代。循环条件是布尔类型
通常循环结束是因为循环条件返回false了
不在循环条件限制次数的结构:for(;;)或while(true)
结束循环:循环条件返回false;在循环体中执行break

4、for循环:

for(初始条件;循环条件;迭代条件){
循环体;}
for里定义的i,只在for循环中用

5、while循环:

初始条件;
while(循环条件){
循环体;
迭代条件;}

注意不要丢了迭代条件,丢失可能导致死循环
for循环和while循环可以相互转换,但是初始条件的作用范围不同
while的i,出了while循环也可使用

6、do-while循环:

初始条件;
do{
循环体;
迭代条件;
}while(循环条件);

do-while循环至少执行一次循环体

7、嵌套循环:

讲一个循环结构A声明在另一个循环结构B的循环体中,就构成嵌套循环
外层循环:B
内层循环:A
内层循环结构遍历一次,只相当于外层循环循环体执行了一次
假设外层循环需要执行m次,内层循环需要执行n次,此时内层循环的循环体一共执行m*n次
外层循环控制行数,内层循环控制列数

8、特殊关键字:break、continue

break: switch-case或者循环结构 结束当前循环 关键字后面不能声明执行语句
**continue:**循环结构 结束当次循环 关键字后面不能声明执行语句
break默认跳出包裹此关键字最近一层的循环
break结束指定标识的一层循环,label:for();{

break label;}

9、return:结束一个方法

10、练习

(1)break和continue

		for(int i = 1;i <=10;i++){
			if(i%4==0){
				//break;//123
				continue;//123567910
			}
				System.out.println(i);
				}

(2)标签label的使用

label:for(int j=1;j<=4;j++){
			for(int i = 1;i <=10;i++){
				if(i%4==0){
					continue label;
				}
				System.out.print(i);}
				System.out.println();//123123123123
		}

(3)遍历100以内的偶数,打印偶数的和及个数

//do while方式
		int i = 1;
		int sum = 0;
		int account = 0;
		do{
			if(i%2==0){
				System.out.println(i);
				sum+=i;
				account++;
			}
			i++;}
			while(i<=100);
			System.out.println(sum);//偶数的和
			System.out.println(account);//偶数的个数
//for循环方式
		int sum = 0;
		int count = 0;
		for(int i = 1;i <= 100;i++){
			if(i%2==0){//遍历奇数i%2==1
			System.out.println(i);//输出100以内的偶数
			sum += i;
			count++;}}
			System.out.println("总和为"+sum);//输出100以内所有偶数的和
			System.out.println("偶数个数为"+count);//输出100以内偶数的个数

(4)输出1000以内的完数:一个数等于除他自身的因数之和

		int sum=0;
		for(int i = 1;i<=1000;i++){
			for(int j = 1;j<=i/2;j++){
				if(i % j==0){
					 sum += j;}
					 }
					if(sum == i){
						System.out.println(i);}
						sum = 0;
						}

(5)从键盘随机获取两个正整数,求最小公约数、最小公倍数

// 导包 import java.util.Scanner;
		Scanner scan = new Scanner(System.in);
		System.out.print("请输入两个正整数;");
		int m = scan.nextInt();
		int n = scan.nextInt();
		int min = (m <= n)? m : n;
		int max = (m >= n)? m : n;

		//最小公约数
		for(int i = min;i >= 1;i--){
			if(m % i == 0 && n % i == 0){
				System.out.println(m+","+n+"最小公约数:"+i);
				break;}}//一旦在循环中执行到break,跳出循环
		
		//最小公倍数
		for(int i = max;i <= (m*n);i++){
			if(i % m == 0 && i % n ==0){
				System.out.println(m+","+n+"最小公倍数:"+i);
				break;}}

(6)水仙花数

		System.out.println("水仙花数:");
		for(int i = 100;i<1000;i++){
		int a = i/100;
		int b = i/10%10;
		int c = i%10;
		if(i == a*a*a+b*b*b+c*c*c){
			System.out.println(i);}}

(7)九九乘法表

		for(int i=1;i<=9;i++){//行
			for(int j=1;j<=i;j++){//列
			    System.out.print(i+"*"+j+"="+i*j);
				System.out.print(" ");}
			System.out.println();}

(8)质数输出

//方法一
        boolean isFlag = true;
		for(int i=2;i<=100;i++){
			for(int j = 2;j<=Math.sqrt(i);j++){    
				//优化二:对本身是质数的自然数有效
			    //for(int j = 2;j<i;j++){
				if(i%j==0){
					isFlag = false;}
					 //优化一:只对本身非质数的自然数有效
					//break;}       
			}
			if(isFlag == true){
				System.out.println(i);}
				isFlag = true;
		}
		
//方法二
		int account=0;
		long start = System.currentTimeMillis();
		for(int i=1;i<=100;i++){
			for(int j=1;j<=i;j++){
				if(i%j==0){
					account++;}}
					if(account==2){
						System.out.println(i);}
						account = 0;//account重置,不然进入下一个循环时它的值为2
			}
			//获取结束时间距离1970年1与1日0时0分0秒的毫秒数
		long end = System.currentTimeMillis();
		System.out.println(end-start);
		
//方法三
				label:for(int i=2;i<=100;i++){
			for(int j = 2;j<=Math.sqrt(i);j++){    
				
				if(i%j==0){
					continue label;}      
			}
			System.out.println(i);
				
		}

(9)一些图形的输出

/*
    *
   * *
  * * *
 * * * *
* * * * *
 * * * *
  * * *
   * *
    *
*/
class QianTao4 {
	public static void main(String[] args) {
		for(int i = 0;i<5;i++){
			for(int j = 0;j<4-i;j++){
				System.out.print(" ");}
				for(int k=0;k<i+1;k++){
					System.out.print("* ");}
				System.out.println();
		}

		for(int i = 0;i<4;i++){
			for(int j = 0;j<i+1;j++){
				System.out.print(" ");}
				for(int k = 0;k<4-i;k++){
					System.out.print("* ");}
					System.out.println();
		}
	}
}

(10)学生成绩等级

//导包  import java.util.Scanner;
		System.out.print("请输入学生成绩:(100分制)");
		Scanner scan = new Scanner(System.in);
		int score = scan.nextInt();
		/*switch(score/10){
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
				System.out.println("不及格");
			break;
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
				System.out.println("及格");
			break;
			default:
				System.out.println("请重新输入");
			break;
			}*/
			switch(score/60){
				case 0:
					System.out.println("不合格");
				    break;
				case 1:
					System.out.println("合格");
				    break;
				default:
					System.out.println("请重新输入成绩");
				    break;
				}
	}

(11)输入年月日,判断是一年中第几天(注意闰年)

//导包  import java.util.Scanner;
        Scanner scan = new Scanner(System.in);
		System.out.print("请输入年份:");
		int year = scan.nextInt();
		System.out.print("请输入月份:");
		int month = scan.nextInt();
		System.out.print("请输入月份中天数:");
		int day = scan.nextInt();
		int sumDays = 0;
		switch(month){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				if(year%400==0 || (year%4==0 && year%100!=0)){
				       sumDays += 29;}
					   else{
						   sumDays += 28;}		   
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
		}

		System.out.println(year+"年"+month+"月"+day+"日"+"是"+year+"年第"+sumDays+"天");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值