java 循环结构 for while do-while

/*
循环结构
一在某些条件满足的情况下,反复执行特定代码的功能
1语句分类: for循环 while循环 do-while循环
2循环语句组成部分:
1,初始化部分
2,循环条件部分(通常情况下,循环结束都是因为出现false)
3,循环体部分
4,迭代部分
二for循环结构
for(初始化条件;循环条件(必须是Boolean类型);迭代条件){
循环体
}

执行过程1-2(true)-3-4-2(true)-3-4-’’’’’-2(false)-循环结束

三,for循环中break的使用,大括号中插入break可以在循环条件为true的
情况下终止循环。一般与if-else配合。

*/

import java.util.Scanner;

class ForTest{
	public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
	System.out.println("请输入要重复的语句");
	String word = scan.next();
	System.out.println("请输入要重复的次数");
	int num = scan.nextInt();
	for (int i = 1; i <= num; i++ ){ // i值从1不断增加,直到大于num,一共执行numc次
    System.out.println(word);
	System.out.println("第" + i + "次"); //变量i只在for循环内有效,出了循环失效        
	}
	/*
    第二种写法,i从0开始
    for (int i = 0; i < num; i++ ){ // i值从0不断增加,直到等于num,一共执行numc次
    System.out.println(word + "你好");
	}

    */
    int num1 = 1;
	for (System.out.println("a"); num1 <=3; System.out.println("c"),num1++){//for后面()内只能有两个;表达式内部如果有两句或以上用,分隔开 例如System.out.println("c"),num++
		System.out.println("b");
	}//输出abcbcbc, 

    //例题1 ,遍历n以内的偶数,输出结果的总和,输出偶数的个数
	System.out.println("请输入n值");
	int n = scan.nextInt();
    int sum = 0;
	int num2 = 0;//必须在for外部先赋值,如果for条件不满足进不去可能会因为变量没有初始化而报错
	for (int i = 0; i <= n; i++){
       if (i % 2 ==0){
        System.out.println(i); 
		sum += i;//使用+= 进行累加
		num2++;//每得到一个偶数数值加1
       }
	}
	    System.out.println("n以内偶数的总和为" + sum); //需要放到循环体外
		System.out.println("n以内偶数个数为" + num2);

	//例题2,遍历1-m,每一行打印一个值,并在3的倍数后打印 “3的倍数”在5的倍数后打印 “5的倍数”在7的倍数后打印 “7的倍数”

/*

    //第一种写法
    System.out.println("请输入m值");
	int m = scan.nextInt();
	for (int i = 1; i <= m; i++){
        
       if (i % 3 == 0 && i % 5 == 0 && i % 7 == 0){
        System.out.println(i + " 3的倍数" + " 5的倍数" + " 7的倍数"); 	
       }else if(i % 3 == 0 && i % 5 == 0){
		System.out.println(i + " 3的倍数" + " 5的倍数");
       }else if(i % 5 == 0 && i % 7 == 0){
		System.out.println(i + " 5的倍数" + " 7的倍数");
       }else if(i % 3 == 0 && i % 7 == 0){
		System.out.println(i + " 3的倍数" + " 7的倍数");
       }else if(i % 3 == 0){
		System.out.println(i + " 3的倍数");
       }else if(i % 5 == 0){
		System.out.println(i + " 5的倍数");
       }else if(i % 7 == 0){
		System.out.println(i + " 7的倍数");
       }else{
		System.out.println(i);
       }
	}
*/

	//第二种写法

	System.out.println("请输入m值");
	int m = scan.nextInt();
	for (int i = 1; i <= m; i++){
       
		System.out.print(i + " ");//不换行继续输出
		if (i % 3 == 0 && i % 5 == 0 && i % 7 == 0){
        System.out.print("3的倍数 " + "5的倍数 " + "7的倍数 "); 	
       }else if(i % 3 == 0 && i % 5 == 0){
		System.out.print("3的倍数 " + "5的倍数 ");
       }else if(i % 5 == 0 && i % 7 == 0){
		System.out.print("5的倍数 " + "7的倍数 ");
       }else if(i % 3 == 0 && i % 7 == 0){
		System.out.print("3的倍数 " + "7的倍数 ");
       }else if(i % 3 == 0){
		System.out.print("3的倍数 ");
       }else if(i % 5 == 0){
		System.out.print("5的倍数 ");
       }else if(i % 7 == 0){
		System.out.print("7的倍数 ");
       }
        System.out.println();
       }

	   //输出 1-z的整数,其中3,5,7的倍数不打印
		System.out.println("请输入Z值");
	    int z = scan.nextInt();
	    for (int i = 1; i <= z; i++){
        if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0){
		System.out.println();
        }else{
        System.out.println(i);
		}
	}
	   //例题四,输出100-1000中的水仙花数,既 数字本身是各个位上数字的立方之和,例如153=1^3+5^3+3^3

	   for (int i = 100;i <1000;i++ ){
		   int iBai = i / 100;
		   int iShi = i % 100 / 10;
		   int iGe = i % 10;
       if (i == iBai * iBai * iBai + iShi * iShi * iShi + iGe * iGe * iGe ){
          System.out.println("找到一个水仙花数" + i);
       }
		
	   }
   
       //例题五,打印九九乘法表  for语句可以嵌套执行

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


		//例题六输入x,y,求出x与y的最小公倍数与最大公约数
        System.out.println("请输入X值");
	    int x = scan.nextInt();
		System.out.println("请输入Y值");
	    int y = scan.nextInt();
		int max =(x >= y)? x : y;
	    for (int i = max; i <= x * y; i++){
        if (i % x == 0 && i % y == 0){
		System.out.println("X与Y的最小公倍数是" + i);//必须在break前输出,否则结果不对
		break;
        }
		
        }
		int min = (x <= y)? x : y; //使用三元运算符判断xy中的最小值
		for (int i = min; i > 0; i--){//可以直接写int i = x,不能保证x大小,效率不保证
        if (x % i == 0 && y % i == 0){
		System.out.println("X与Y的最大公约数是" + i);
		break;//找到第一个符合条件的公约数后跳出循环
        }
        }
 //寻找p以内的质数,质数也叫素数,只能被1和它本身整除的自然数,最小的质数是2
	   System.out.println("请输入p1值");
	   int p1 = scan.nextInt();
	       long start = System.currentTimeMillis();//获取当前时间距离1970年1月1日0时0分0秒距离现在的毫秒数,类型为long
	      boolean isPrime = true;  //设置一个布尔变量来判断内层循环结果是否为质数
	   for (int i = 2;i <= p1 ;i++ ){  //遍历2到p范围内的自然数
            for (int j = 2;j < i;j++ ){//设置变量j被i整除
            if (i % j == 0){
			isPrime = false;  
           }
		   }
		   if (isPrime == true){
		   System.out.println("找到一个质数" + i);
		   } 
		   isPrime = true;//重置布尔变量值,为下一次判断做准备
	   }
	      long end = System.currentTimeMillis();//1秒等于1000毫秒,用来测试算法效率
		  System.out.println("程序1执行时间=" + ( end - start ));
	   

	   //变量可以定义在for循环内部,这样不必在末尾重置
	    System.out.println("请输入p2值");
	   int p2 = scan.nextInt();
	        long start1 = System.currentTimeMillis();
	   for (int i = 3;i <= p2 ;i +=2 ){  //遍历3到p范围内的奇数,提高效率
	        boolean isPrime1 = true;  //设置一个布尔变量来判断内层循环结果是否为质数
            for (int j = 2;j <= Math.sqrt(i);j++ ){//调用Math.sqrt()方法求开方。优化对质数有效,对非质数也有效
            if (i % j == 0){
			isPrime1 = false;
			break;//结束内层循环,只对非质数的自然数有效果,提高效率
           }
		   }
		   if (isPrime1 == true){
		   System.out.println("找到一个质数" + i);
		   } 
	   }
	       long end1 = System.currentTimeMillis();
		   System.out.println("程序2执行时间=" + ( end1 - start1));
	}
}

/*
循环语句二 while循环

循环语句组成部分
1,初始化部分
2,循环条件部分(通常情况下,循环结束都是因为出现false)
3,循环体部分
4,迭代部分

while循环结构
1
while(2){
3;
4; 如果没有4编译不报错,但会陷入死循环,无限执行,需要保证算法的有限性。
}

cmd命令窗口中陷入死循环按ctrl + c 中止执行

while循环执行过程 1-2(true)-3-4-2(true)-3-4-’’’’’-2(false)-循环结束

for与while的关系,可以互相转换。

for与while 的不同点,while的初始化条件1在循环外部,可以被其他语句调用。
for的初始化条件出了循环结构就不能被调用。

无限循环可以用while(true)或者for(;;)来实现,利用条件判断语句输出break来结束循环

*/

import java.util.*;

class WhileTest {
	public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
       
	    int i = 0 ;
		while (i <= 20){
        System.out.println("Hello World!");
		i++;//可以写成i += 1
		}
        System.out.println("i值为" + i);//输出21

		//循环综合练习
        //例题1,从键盘输入不定个数的整数,判断输入数据中整数与负数的个数,当输入0时程序结束
        //无限循环可以用while(true)或者for(;;)来实现,利用条件判断语句输出break来结束循环
		
		 int positiveNum = 0;
		 int negativeNum = 0;
		 while (true){
		 System.out.println("请输入一个整数");
	     int num = scan.nextInt();
         if (num == 0) {
	     break;
         }else if (num < 0){
         negativeNum++;
         }else if (num > 0){
         positiveNum++;		                
         }     
         //此处没有迭代体,可以编译通过
		 }
	     System.out.println("正数数量为" + positiveNum);
	     System.out.println("负数数量为" + negativeNum);

		 //使用for来实现
		 int positiveNum1 = 0;
		 int negativeNum1 = 0;
         for (positiveNum1 = 0 ,negativeNum1 = 0;true;) {//迭代条件不写,可以编译通过
         System.out.println("请输入一个整数");
	     int num = scan.nextInt();
         if (num == 0) {
	     break;
         }else if (num < 0){
         negativeNum1++;
         }else if (num > 0){
         positiveNum1++;
         }
		 }
		 System.out.println("正数数量为" + positiveNum1);
	     System.out.println("负数数量为" + negativeNum1);
         
         for (;;) {//等同于while(true)
         System.out.println("请输入一个整数");
	     int num = scan.nextInt();
         if (num == 0) {
	     break;
         }else if (num < 0){
         negativeNum1++;
         }else if (num > 0){
         positiveNum1++;
         }
		 }
		 System.out.println("正数数量为" + positiveNum1);
	     System.out.println("负数数量为" + negativeNum1);
 
          //练习找到n以内的完数,完数为一个数本身等于它的因子之和,例如6=1+2+3.

		 System.out.println("请输入一个整数n,以下列出n以内的完数");
		 int n = scan.nextInt();
		 int j = 1;
		 int sum = 0;
		 while (j <= n){
         int k = 1;
         while (k < j){ //此处是k<j 不能用<= 否则找不到
		 if (j % k == 0){
		 sum += k;
		 } 
		 k++;
         }
		 if (j == sum){
         System.out.println("找到一个完数" + j);
         }
		 j++;
		 sum = 0;//此处必须重置sum,否则找不到
		 }
	}
}

/*
循环语句三 do while循环

循环语句组成部分:
1,初始化部分
2,循环条件部分(通常情况下,循环结束都是因为出现false)
3,循环体部分
4,迭代部分

do while循环结构
1
do{
3;
4;
}while(2);

cmd命令窗口中陷入死循环按ctrl + c 中止执行

do while循环执行过程 1-3-4-2(true)-3-4–2(true)’’’’’-3 -4 -2(false)-循环结束

do-while特点:至少会执行一次循环体的语句
开发中do-while 较少使用

*/

import java.util.*;
class DoWhileTest {
	public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
		//遍历100以内的奇数,并输出奇数个数与总和
		int num = 1;
		int count = 0;
		int sum = 0;

        do{
	     
         if (num % 2 ==1){
          System.out.println(num);		  
		  sum += num;
		  count++;
         }
		 num++;
            
        }
        while (num <= 100);
		System.out.println("奇数个数为" + sum);
		System.out.println("总和为" + count);
	}
}
发布了47 篇原创文章 · 获赞 1 · 访问量 1091

猜你喜欢

转载自blog.csdn.net/wisdomcodeinside/article/details/103771957