Java基础之循环控制篇

简介: 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();
     }
    

    }
    }

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

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到精通会持续分享给大家,供大家参考!如果对你们的学习有一定的帮助,或者有什么意见建议,欢迎留言!谢谢大家!

相关文章
|
22天前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中stream API与传统for循环在性能上的对比,通过多个示例分析了不同场景下两者的优劣。作者指出,尽管stream API使代码更简洁,但不当使用会降低可读性和性能,特别是在处理大数据量时。实验结果显示,在多数情况下,普通for循环的性能优于stream API,尤其是在单次操作耗时较短但需多次执行的场景中。文章建议开发者在设计初期就考虑全局流程,避免重复使用stream流,以提升代码质量和性能。
Java循环操作哪个快?
|
28天前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中Stream API与传统for循环的性能对比及适用场景。作者通过实际案例分析,指出在某些情况下,过度使用Stream API会导致代码可读性和维护性下降。测试结果显示,在数据量较小的情况下,普通for循环的性能优于Stream API,尤其是在涉及多次类似操作时。因此,建议在开发中根据具体需求选择合适的遍历方式,以提高代码的可读性和性能。
Java循环操作哪个快?
|
4月前
|
存储 Java
|
2月前
|
算法 Java 测试技术
🧑‍💻Java零基础:Java 的循环退出语句 break
【10月更文挑战第16天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
51 6
|
2月前
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
35 1
|
3月前
|
Java
java基础(2)循环语句for、while、do...while
本文介绍了Java中的基础循环语句,包括for循环、while循环和do...while循环。文章通过示例代码展示了for循环的基本结构和用法,while循环的先判断后执行逻辑,以及do...while循环的先执行后判断逻辑。这些循环语句在Java编程中非常常用,用于执行重复的任务。
57 4
java基础(2)循环语句for、while、do...while
|
2月前
|
传感器 Java 测试技术
📖Java零基础-do-while循环语句的深入剖析
【10月更文挑战第5天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 1
|
7月前
|
Java
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
73 1
|
3月前
|
Java
Java循环
Java循环
43 6
|
3月前
|
编译器
Java--for循环语句
Java--for循环语句