• luogg_java学习_03_流程控制及循环结构


    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

    **转载请注明 出自 : luogg的博客园 ** 谢谢配合!

    程序流程控制

    • 顺序结构
    • 分支结构:if-else,switch-case
    • 循环结构:while,do-while,for

    if-else三种格式

    1.
    if(true){
        执行代码块;
    }
    
    2.
    if(){
    }else{
    }
    
    3.
    if(){
    }else if(){
    }
    ...
    else{
    }
    
    if-else的练习
    //输入小明的成绩,并输出相应成绩对应的奖励
            //创建一个Scanner类的对象
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请输入小明的期末成绩");
    		//调用此对象响应的方法,完成键盘输入的值得获取
    		int score=sc.nextInt();
    		if(score>100||score<0){
    			System.out.println("你输入的数值有误,请重新输入");
    		}else if(score==100){
    			System.out.println("奖励一俩BMW");
    		}else if(80<score&&score<=99){
    			System.out.println("奖励一部iphone6s");
    		}else if(60<score&&score<=80){
    			System.out.println("奖励一本参考书");
    		}else{
    			System.out.println("什么都不奖励");
    		}
    		sc.close();
    
    switch的用法
     switch(变量){
       case 值1:
       case 值2:
       case 值3:
       default:
     }
    
    1. 根据变量的值,选择相应的case去判断,一旦满足case条件,就执行case的相应语句,如果没有break语句,会继续执行其下的case语句。
    2. default:是可选的,而且位置是灵活的。
    3. 变量可以是哪些类型?char,byte,short,int,枚举.
    4. case条件:其中条件只能是值,不能是取值范围。switch-case不能对区间进行判断。

    for循环
    • for循环结构
    • 1.初始化条件
    • 2.循环条件
    • 3.迭代条件
    • 4.循环体
    public static void main(String[] args) {
    		int j=1;
    		for(System.out.println('a');j<3;System.out.println('b'),j++){
    			System.out.println('c');//acbcb
    		}
    
    //输出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);//2550
    		System.out.println("100以内偶数的个数为"+count);//50
    	}
    
    //编写程序,从1循环到150在每行打印一个值,并在3的倍数后边打印foo,
    		//5的倍数后边打印biz,7的倍数后边打印baz
    		for(int a=1;a<=150;a++){
    			System.out.print(a);
    
    			if(a%3==0){
    				System.out.print("foo ");
    			}
    			if(a%5==0){
    				System.out.print("biz ");
    			}
    			if(a%7==0){
    				System.out.println("baz");
    			}
    			System.out.println();
    		}
    

    水仙花数

    //输出一个水仙花数,水仙花数就是一个3位数,
    		//其各个位上的数字立方和其本身
    		//例如:153=1*1*1+5*5*5+3*3*3
    		for(int i=100;i<=999;i++){//遍历所有的三位数    456
    			int j1=i/100;//百位
    			int j2=(i-j1*100)/10;//十位
    			int j3=i%10;//个位
    			if(i==j1*j1*j1+j2*j2*j2+j3*j3*j3){
    				System.out.print(i+" ");//153 370 371 407
    			}
    		}
    

    while循环

    • 1.初始化条件
    • 2.循环条件
    • 3.迭代条件
    • 4.循环体
      初始化条件
      while(循环条件){
         循环体
         迭代条件
      }
    
    • for循环与while循环可以相互转换。
    • while与for的区别:while的初始化条件定义在外边,for定义在内部,初始化条件在执行完循环以后还可以用,而for不可以用。
    // 100以内的偶数的输出,以及它们的和
    		int i = 1;
    		int sum = 0;
    		while (i <= 100) {
    			if (i % 2 == 0) {
    				System.out.println(i);
    				sum += i;
    			}
    			i++;
    		}
    		System.out.println(sum);
    

    do-while(用的少)

    • 1.初始化条件
    • 2.循环条件
    • 3.迭代条件
    • 4.循环体
    初始化条件
        do{
            循环体
            迭代条件
        }while(循环条件);
    
    • do-while与while的区别:do-while循环至少会执行一次

    循环练习

    //从键盘读入个数为10个的整数,并判断读入的正数和负数的个数
    		Scanner s = new Scanner(System.in);
    		int a = 0;//记录正数的个数
    		int b = 0;//记录负数的个数
    		int c = 0;//记录0的个数
    		for(int i = 1;i <= 10;i++){
    			System.out.println("请输入第"+i+"个整数");
    			int num = s.nextInt();
    			if(num > 0){
    				a++;
    			}else if(num < 0){
    				b++;
    			}else if(num == 0){
    				c++;
    			}
    		}
    		System.out.println("正数的个数为"+a);
    		System.out.println("负数的个数为"+b);
    		System.out.println("0的个数为"+c);
    		s.close();
    
    //从键盘输入个数不确定的数,并判断读入的正数和负数的个数,输入0时结束程序
    		Scanner s = new Scanner(System.in);
    		int a = 0;//记录正数的个数
    		int b = 0;//记录负数的个数
    		for(;;){
    			System.out.println("请输入一个整数:");
    			int num = s.nextInt();
    			if(num > 0){
    				a++;
    			}else if(num < 0){
    				b++;
    			}else{
    				break;
    			}
    		}
    		System.out.println("正数的个数为:"+ a);
    		System.out.println("负数的个数为:"+ b);
    		s.close();
    
    • 无限循环for(;; ) while(true)
    • 一般情况下,在无限循环的内部要有程序终止的语句,break,若没有就是死循环了。

    循环的嵌套使用

            /*
    		 	*****
    		 	*****
    		 	*****
    		 */
    		for (int j = 1; j <= 4; j++) {// 外层循环控制行数
    			for (int i = 1; i <= 5; i++) {// 内层循环控制列数
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    
    	/*
    			*
    			**
    			***
    			****
    		*/
    		
    		for (int j = 1; j <= 4; j++) {
    			for(int i = 1;i<=j;i++){
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    
    		/*
    		 	****
    		 	***
    		 	**
    		 	*
    		 */
    		for (int j = 1; j <= 4; j++) {
    			for(int i = 4;i>=j;i--){
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    
    /*
    		 		----*
    		 		---* *
    		 		--* * *
    		 		-* * * *
    		 		* * * * *
    		 		-* * * *
    		 		--* * *
    		 		---* *
    		 		----*
    		 */
    		//上半部分
    		for(int i = 1;i <= 5;i++){
    			for(int j = 4;j >= i;j--){
    				System.out.print(" ");
    			}
    			for(int k = 1;k <= i;k++){
    				System.out.print("* ");
    			}
    			System.out.println();
    		}
    		//下半部分
    		for(int i = 1;i <= 4;i++){
    			for(int j = 1;j <= i;j++){
    				System.out.print(" ");
    		}
    			for(int k = 4;k >= i;k--){
    				System.out.print("* ");
    			}
    			System.out.println();
    		}
    
    //打印九九乘法表
    		for(int i = 1;i <= 9;i++){
    			for (int j = 1; j <= i; j++) {
    				System.out.print(j + "*" + i + "=" + j*i + "	");
    			}
    			System.out.println();
    		}
    

    打印100以内所有的质数

    //打数印100以内所有质数
    		//质数:除了1和他本身以外不能再被其他数整除
    		boolean flag = false;
    		for(int i = 2;i <= 100;i++){//实现100以内自然数遍历
    			for(int j = 2;j < i;j++){
    				if(i % j == 0){
    					flag = true;
    				}
    			}
    			if(flag == false){
    				System.out.println(i);
    			}
    			flag = false;
    		}
    
     测试完成求 1-10w 所有质数 所用的毫秒数
     long start = System.currentTimeMillis();
    		boolean flag = false;
    		for(int i = 2;i <= 100000;i++){//实现100以内自然数遍历
    			for(int j = 2;j < i;j++){
    				if(i % j == 0){
    					flag = true;
    				}
    			}
    			if(flag == false){
    				System.out.println(i);
    			}
    			flag = false;
    		}
    		long end = System.currentTimeMillis();
    		System.out.println("完成操作所用的毫秒数为:"+ (end-start));//51305
    

    费时太多,需要优化,首先在flag底下加break,然后将flag==false改为!flag,再将j<i变为j<Math.sqrt(i) 根号i;

    long start = System.currentTimeMillis();
    		boolean flag = false;
    		for(int i = 2;i <= 100000;i++){//实现100以内自然数遍历
    			for(int j = 2;j <= Math.sqrt(i);j++){//判断根号i
    				if(i % j == 0){
    					flag = true;
    					break;
    				}
    			}
    			if(!flag){
    				System.out.println(i);
    			}
    			flag = false;
    		}
    		long end = System.currentTimeMillis();
    		System.out.println("完成操作所用的毫秒数为:"+ (end-start));//51305
    		//加上break之后,4796,使用Math.sqrt()之后,270毫秒
    

    break与continue

    /*
    		 * break:结束"当前"循环。 
    		 * continue:跳出"本次"循环,继续下一次循环。
    		 */
    		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.println(i);
    		}
    
    • break和continue语句之后不能再添加其他语句,因为不可能被执行。
  • 相关阅读:
    Closing File Descriptors
    Redirecting stdout using exec
    Debugging on part(s) of the script
    Android深入浅出之Audio 第一部分 AudioTrack分析
    svn在linux下的使用(svn命令)[转]
    Android深入浅出之Binder机制
    bash中获取文件路径和文件命的函数
    Android深入浅出之Audio 第一部分 AudioTrack分析
    Shell的脚本编程
    Android深入浅出之Surface
  • 原文地址:https://www.cnblogs.com/luogg/p/5658393.html
Copyright © 2020-2023  润新知