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

相关文章
|
2月前
|
Java
Java周期循环的代码可以如此简单
Java周期循环的代码可以如此简单
29 2
|
4月前
|
Java
Java中for循环的六种形态
Java中for循环的六种形态
23 0
|
5月前
|
Java C语言
Java选择与循环
Java选择与循环
36 0
|
5月前
|
算法 Java
7.Java判断和循环+面试相关力扣算法题详解
7.Java判断和循环+面试相关力扣算法题详解
131 1
|
5月前
|
Java
8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏
8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏
80 1
|
11天前
|
Java
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
【4月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
28 1
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
|
2天前
|
安全 Java
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
|
2月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
95 3
|
2月前
|
Java
java使用循环案例—
java使用循环案例—
9 0
|
2月前
|
Java 开发者 Spring
【Java】Spring循环依赖:原因与解决方法
【Java】Spring循环依赖:原因与解决方法
42 0