1.Java基础之循环控制篇

循环语句

循环语句就是在满足一定条件下反复执行某一种操作。在Java中提供了3中常用的循环语句,分别是 while循环语句、do....while循环语句、for循环语句。

  • while循环语句

        它也称之为判断语句,它的循环方式为利用一个条件来控制是否继续反复来执行这个语句。

语法:
while(条件表达式){
	执行语句;
}//当条件表达式为true的时间,执行{}里面的执行语句,当执行完{}里面的语句后,重新来判断条件表达式的返回值,直到返回值为false的时间,退出循环。
/**
 * 求1~1000相加之和
 */
public class afterAll{
        public static void main(String[] args) {
            int mywhile =0;
            int mysum =0;//记录相加之和
            while (mywhile<=1000){
                mysum = mywhile+mysum;
                mywhile++;
            }
            System.out.println(mysum);
        }
}

  •  do……while循环语句

首先do while循环语句与while循环语句类似,它们之间的区别就是while语句先判断条件是否成立,再执行循环体,而do while循环语句则先执行一次循环后,再进行判断条件是否成立。通俗点就是do while循环语句中的{}程序段至少执行一次。 

 语法:
    do {
        执行语句
    }while(条件表达式);
/**
 * 一段代码看while语句和do while 语句的区别。
 */
public class afterAll{
        public static void main(String[] args) {
            int myone =200;
            while(myone==60){
                System.out.println("\"我是闪电小王子!\"");
                myone--;
            }//由此可见呢,while并没有被执行,因为条件表达式返回值为false;
            System.out.println(myone);//此时myone还是等于初始变量200
            int mytwo=200;
            do {
                System.out.println("\"我是青蛙小王子!\"");
                mytwo--;
            }while(mytwo==60);//此时的do while语句被执行,但是呢因为while表达式返回值为false,但是还是被执行发了一次。
            System.out.println(mytwo);//此时mytwo结果为199;
        }
}

总结: while 语句,先判断在执行; do...while  语句是先执行一次,再进行判断,如果表达式返回值为false,再循环结束。

使用do……While循环实现用户注册输入密码操作

/**
		 * 6.使用do……while循环实现用户注册两次输入密码场景,如果输入错误,则重新输入,直到密码设置成功
		 */
		Scanner sc = new Scanner(System.in);
		String password,passwordConfrim;
		do {
			System.out.println("请输入密码:");
			password = sc.nextLine();
			System.out.println("请确认密码:");
			passwordConfrim = sc.nextLine();
			if(!passwordConfrim .equals(password)) {
				System.out.println("两次密码不一致!请重新输入!");
			}
		}while(!passwordConfrim.equals(password));
		System.out.println("密码设置成功!您的最终密码为:\n"+passwordConfrim);
  • for循环语句

for 循环是Java程序设计中最有用的循环语句之一,一个for循环可以用来重复执行某条语句,知道某个条件得到满足。再Java5以后新增了 foreach 语法。

语法: for(初始化表达式1;布尔表达式2;赋值表达式3){
        语句序列;
    }//表达式1:初始化表达式,负责完成变量的初始化;
	//表达式2:循环条件表达式,返回值为boolean型表达式,指定循环条件;
	//表达式3:循环后操作表达式,负责修整变量,改变循环条件。(在完成一次循环之后才执行)
/**
 * 用for循环来计算2-100之间所有偶数之和
 */
public class afterAll{
        public static void main(String[] args) {
            int mysum =0;//声明一个变量用于记录相加之和
            for (int myone=2;myone<=100;myone+=2){//初始化变量判断条件 偶数加二永远为偶数
                mysum=mysum+myone;//计算结果
            }
            System.out.println("0~100所有偶数的和为:"+mysum);
        }
}

for循环和while循环的区别:

在实际开发中,在明确循环次数的情况下使用for循环,在不明确循环次数的时间使用while循环。

  • foreach循环语句

foreach循环通常用于遍历数组或集合中的元素。

//语法
for (类型 变量名 : 数组名) {
// 循环体
}

其中,类型 是数组或集合中元素的数据类型,变量名 是循环变量的名称,数组名 是需要遍历的数组或集合的名称。循环体是需要重复执行的代码。

遍历整型数组的方法:

int[] nums = {1, 2, 3, 4, 5};
for (int num : nums) {
System.out.println(num);
}

for循环嵌套循环加强版(Enhanced version)练习

1.打印正序倒序9*9乘法表格

        /**
		 * 7.打印9*9乘法表格
		 */
		System.out.println("正序乘法表格");
		for(int i=1;i<=9;i++) {
			for(int k=1;k<=i;k++) {
				int j =k*i;
				System.out.print(k+"*"+i+"="+j+"\t");
			}
			System.out.println();
		}




		System.out.println("倒序乘法表格");
		LLp:for(int i=9;i<=9;i--) {
			if(i<=0) {
				break LLp;
			}
			for(int j=1;j<=i;j++) {
				int k=j*i;
				System.out.print(j+"*"+i+"="+k+"\t");
			}
			System.out.println();
			
		}

2.打印等腰三角形

        /**
		 * 8.打印等腰三角形
		 */
		for(int i=1;i<=6;i++) {
			for(int j=1;j<=6-i;j++) {
				System.out.print(" ");
			}
			for(int k=1;k<=2*i-1;k++) {
				System.out.print("*");
			}
			System.out.println();
		}

3.打印菱形

        /**
		 * 9.打印菱形
		 */

        //菱形上半部分打印
		for(int i=1;i<=6;i++) {
			for(int j=1;j<=6-i;j++) {
				System.out.print(" ");
			}
			for(int k=1;k<=2*i-1;k++) {
				System.out.print("*");
			}
			System.out.println();
		}

        //菱形下半部分打印
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print(" ");
			}
			for(int k =1;k<=10-(2*i-1);k++){
				System.out.print("*");
			}
			System.out.println();
		}

 4.根据用户输入的三角形行数打印出等腰三角形。

package ymy.circulation.test;

import java.util.Scanner;

/**
 * @author 程序员yangxiaoyuan
 */
public class Text {
    public static void main(String[] agrs) {
    	//实现用户输入等腰三角形行数实现等腰三角形的打印
    	System.out.println("请输入要打印的等腰三角形的行数:");
    	Scanner sc = new Scanner(System.in);
    	int line = sc.nextInt();
    	//开始打印
    	for(int i = 1; i <= line ; i++) {
    		for(int j = 1; j <= line-i; j++) {
    			System.out.print(" ");
    		}
    		for(int k = 1;k<=2*i-1;k++) {
    			System.out.print("*");
    		}
    		System.out.println();
    	}
    	
    }
}

5. 根据输入的菱形行数打印菱形。

package ymy.circulation.test;

import java.util.Scanner;

/**
 * @author 程序员yangxiaoyuan
 */
public class Text {
    public static void main(String[] agrs) {
    	//实现用户输入等腰三角形行数实现等腰三角形的打印
    	System.out.println("请输入要打印菱形的行数:");
    	Scanner sc = new Scanner(System.in);
    	int line = sc.nextInt();
    	//上半部分
    	for(int i = 1; i <= line ; i++) {
    		for(int j = 1; j <= line-i; j++) {
    			System.out.print(" ");
    		}
    		for(int k = 1;k<=2*i-1;k++) {
    			System.out.print("*");
    		}
    		System.out.println();
    	}
    	
    	//下半部分
    	for(int i = 1; i <= line-1; i++) {
    		for(int j = 1; j <= i ; j++ ) {
    			System.out.print(" ");
    		}
    		for(int k = 1; k <= (line+line-1)-2*i ;k++ ) {
    			System.out.print("*");
    		}
    		System.out.println();
    	}
    	
    }
}

6.使用for循环嵌套实现爱心的打印

/**
 * @author 程序员yangxiaoyuan
 * 这是一个测试类,用于单个程序进行测试。
 */

public class Test {
	public static void main(String[] args) {
		        int size = 6; // 调整此变量以改变爱心的大小

		        // 打印上半部分
		        for (int i = size / 2; i <= size; i += 2) {
		            for (int j = 1; j < size - i; j += 2) {
		                System.out.print(" ");
		            }

		            for (int j = 1; j <= i; j++) {
		                System.out.print("*");
		            }

		            for (int j = 1; j <= size - i; j++) {
		                System.out.print(" ");
		            }

		            for (int j = 1; j <= i; j++) {
		                System.out.print("*");
		            }

		            System.out.println();
		        }

		        // 打印下半部分
		        for (int i = size; i >= 1; i--) {
		            for (int j = i; j < size; j++) {
		                System.out.print(" ");
		            }

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

		            System.out.println();
		 }
		        
		        //for循环实现爱心的打印(此爱心非同平常)
		        for(float y = (float) 1.5;y>-1.5;y -=0.1) { 
		        	
		             for(float x= (float) -1.5;x<1.5;x+= 0.05){
		            	 
		                   float a = x*x+y*y-1;  
		                   
		                     if((a*a*a-x*x*y*y*y)<=0.0) {  
		                    	 
		                          System.out.print("^");  
		                     }  
		                     else  
		                          System.out.print(" ");  
		             }  
		             System.out.println();  
		      }  
		        
		        
  }	
}

7.打印6+1菱形

/***
 * @author 程序员yangxiaoyuan
 */
public class DifficultProblems {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		

    	print ( 6 ) ;  //  打印 6+1 行的菱形  
 }

 public   static   void   print ( int   size )   {
     if   ( size  %  2  ==  0 )   {
         size ++;  //  计算菱形大小  
     }

     // 打印菱形上半部分
     for   ( int   i  =  0 ;  i  <  size  /  2  +  1 ;  i ++ )   {
         for   ( int   j  =  size  /  2  +  1 ;  j  >  i  +  1 ;  j -- )   {
             System . out . print ( "   " ) ;  //  输出左上角位置的空白  
         }
         for   ( int   j  =  0 ;  j  <  2  *  i  +  1 ;  j ++ )   {
             System . out . print ( " * " ) ;  //  输出菱形上半部边缘  
         }
         System . out . println ( ) ;  //  换行  
     }


     // 打印菱形下半部分
     for   ( int   i  =  size  /  2  +  1 ;  i  <  size ;  i ++ )   {
         for   ( int   j  =  0 ;  j  <  i  -  size  /  2 ;  j ++ )   {
             System . out . print ( "   " ) ;  //  输出菱形左下角空白  
         }
         for   ( int   j  =  0 ;  j  <  2  *  size  -  1  -  2  *  i ;  j ++ )   {
             System . out . print ( " * " ) ;  //  输出菱形下半部边缘  
         }
         System . out . println ( ) ;  //  换行  
     } 
	}

}

8.百千买百鸡(允翁一,值钱五;鸡母一,值线三;鸡雏三,值钱一.百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”意思是说,一只公鸡五文钱,一只母鸡三文钱,三只小鸡一文钱,要用一百文钱刚好买一百只鸡,问公鸡、母鸡和小鸡各买多少只?)

        /**
		 * 10.百钱买百鸡
		 */
        
        //方法1
		for(int cock=0;cock<=20;cock++) {
			for(int hen=0;hen<=33;hen++) {
				int chilk=100-cock-hen;
				if(chilk%3==0 && chilk/3+hen*3+cock*5==100) {
					System.out.print("公鸡:"+cock+"只  "+"母鸡:"+hen+"只  "+"小鸡:"+chilk+"只"+"\t");
				}
			}
			System.out.println();
		}
		
		//方法2
		for(int cock=0;cock<=20;cock++) {
			for(int hen=0;hen<=33;hen++) {
				for(int chilk=3;chilk<=99;chilk+=3) {
					if(hen+cock+chilk==100 && hen*3 + cock*5 + chilk/3 == 100) {
						System.out.println("公鸡:"+cock+"只  "+"母鸡:"+hen+"只  "+"小鸡:"+chilk+"只"+"\t");
					}
				}
			}
		}

9.分享给大家一个数字逆位处理的方法(今天以5位数为例)

	
		int number;
		Scanner scxx = new Scanner(System.in);
		do {
			System.out.println("请输入您要逆序处理的数字:");
			number=  scxx.nextInt();
			int myriad1=number/10000;//取万位
			int thousand1=number%10000/1000;//取千位
			int hundreds1=number%1000/100;//取百位
			int ten1=number%100/10;//取十位
			int unit1=number%10;//取个位数
			if(number<=0) {
				System.out.println("请你仔细看清要求再进行输入数字逆序处理!");
			}else {
			String dd =unit1+""+ten1+""+hundreds1+""+thousand1+""+myriad1;
			System.out.println("您输入的五位数的数字值为:"+number);
			System.out.println("现在进行逆位处理之后的结果为:"+dd);
			}
		}while(number<=0);	

10.计算1+1/2+1/3+……+1/n(提示用户输入一个正整数,然后对结果进行累加)

/*
  编程实现用户输入整数,计算1+ 1/2 + 1/3 + 1/4 +....+1/n
*/
import java.util.Scanner;
public class ForNumber{
   public static void main(String args[]){
	 int SysNumber;
	 Double Sum=0.0;
	 Scanner scanner = new Scanner(System.in);
         System.out.printf("请输入一个正整数:");
	 SysNumber = scanner .nextInt();
	 if(SysNumber<=0){
	     System.out.printf("请仔细读题要求");  
	  }else{
	     for(int i=1;i<=SysNumber;i++){
		Sum+=1.0/i;
          }
	System.out.println("Sum的最终结果为:"+Sum);
        }
    }

}

好了,到了这里循环控制已经练习的差不多了,因为循环控制很重要,所以呢,还是建议初学的小伙伴们要加强练习,也欢迎大家留言,本次Java基础专栏会持续更新,正在整合手头的资料,后面像计算机底层到Java进阶,常用技术,从0到精通会持续分享给大家,供大家参考!如果对你们的学习有一定的帮助,或者有什么意见建议,欢迎留言!谢谢大家!

你可能感兴趣的:(Java基础篇,java)