黑马程序员技术交流社区

标题: 循环经验小结 [打印本页]

作者: 螳臂挡坦克    时间: 2020-1-7 19:41
标题: 循环经验小结
Java循环结构
While 循环
[Java] 纯文本查看 复制代码
while (布尔表达式){
//循环内容
}

只要布尔表达式为ture, 循环就会一直执行下去.
[Java] 纯文本查看 复制代码
public class Test{
public static void main(String args[]){
        int x=10;
        while (x<20){
                System.out.print("value of x:");
                x++;
                System.out.println(x);
        }
}
}

其中 while (x<20)为布尔表达式,后方的三行为循环执行内容,会持续执行.


do While 循环
[AppleScript] 纯文本查看 复制代码
do{
        //代码语句
}while(布尔表达式);


执行语句块,然后判断布尔表达式,如果布尔表达式值为true,则语句块一直执行,直到布尔表达式的值为false.
对于while 语句来说,如果不满足条件则不能进行循环,但是在do while循环下,即使我们不满足条件,也至少执行一次.

[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String[]args){
                int x=10;
                do{
                        x++;
                        System.out.print(x);
                        System.out.print("\n");
                }while(x<20);
        }
}

do 之后的语句块被执行之后, 执行while判断 如果while判断结果为true, 语句块会继续执行. 如果判断语句为false.则结束.
for 循环
[Java] 纯文本查看 复制代码
for (初始化;布尔表达式;更新){
//代码语句
}

初始化: 可以申明一种类型,或者初始化一个或多个循环控制变量,也可以是空语句.
布尔表达式: 检测布尔表达式的值,如果为true,循环体被执行.如果为false,循环终止.(如果不满足条件不会执行和do while 不同和 while相同)
执行一次后,更新循环控制变量,再次检测布尔表达式.
(for 循环在执行前,循环执行次数就会被确定)
[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String []args){
                for (int x=20;
                        x<20;
                        x++){
                                System.out.print("value of x:"+x);
                                System.out.print("\n");
                        }
        }
}
//注意,第三块表达式后没有";",
Java 增强for 循环
[AppleScript] 纯文本查看 复制代码
for(申明语句:表达式)
{
//代码句子
}


申明语句:表明行的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数组元素的值相等.
表达式:表达式是要访问的数组名,或者是范围值为数组值得方法.
[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String args[]){
                int [] numbers={10,20,30,40,50};
                for (int x:numbers){
                        System.out.print(x);
                        System.out.print(",");
                }
        }
}
break 关键字
break 用在循环语句中或者Switch 语句中,用来跳出整个语句块.
Break 跳出最里层的循环,继续执行该循环下面的语句
[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String args[]){
                int [] numbers={10,20,30,40,50};
                for (int x:numbers){
                        System.out.print(x);
                        System.out.print(",");
                        if(x==30){
                                break;
                        }
                }
        }
}
break 跳出后执行结果为40,50.
continue关键字
continue适用于任何循环控制结构,作用是让程序立即跳转到下一次循环迭代中.在for 循环中,continue语句使程序立即跳转到下一次循环中,而不执行此次循环的语句块.
在for循环语句中,continue语句让循环直接跳转到更新语句.
在while循环语句中,continue语句让循环直接跳转到布尔表达式.
[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String args[]){
                int [] numbers={10,20,30,40,50};
                for (int x:numbers){
                        if(x==30){
                                continue;}
                        System.out.print(x);
                        System.out.print(",");
                       
                }
        }
}//注意,在for循环语句中,记得把continue的判断放在执行语句的最前面.
运行结果为10,20,40,50. continue语句中的30被跳过了.
下面有几个课外例子
输出数字,逢三进一,
[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String[]args){
        for (int i=1;
        i<=3;
        i++){
        //for (初始化;布尔表达式;更新){执行语句}
                for(int n=1;
                n<=3;
                n++){
                        System.out.println("i="+i+",n="+n);
                        }
                }
        }
}

讲解:
第一个for 定义一个i 并且判断他是否小于3,第二个for定义一个n 并且判断他是否小于3.如果成立

实例: for 嵌套2
打印一张99乘法口诀表.并且要求九个一行.
[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String[] args){
                 for (int i=1; i<=9; i++)
                {
                        for(int k=1; k<=i; k++)
                        {
                                System.out.print(i+"*"+k+"="+i*k+"        ");
                        }
                                System.out.println();
                }
               
                }
}

思路:
双层循环,第一层用于乘,第二层用于计数,当跳出第一层循环之后,执行第二层的循环内容.
实例猴子吃桃  小猴子第一天吃了一半的桃子,然后又吃了一个,
第二天吃了一半然后又吃了一个,到第十天发现只剩下了一个.问开始的时候有多少个桃子



[Java] 纯文本查看 复制代码
public class Test{
        public static void main(String[]args){
                int k=1;
                for (int i=1; i<=9; i++){
                k++;
                k*=2;

       
                }
                System.out.println(k);
        }
}                       

实例:卡拉兹猜想
对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?
(正确的思路应该用for 语句写循环,并且比较简洁,待改进)
[Java] 纯文本查看 复制代码
import java.util.Scanner;
public class Test{


    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请出入一个小于1000的正整数");
        int num = sc.nextInt();
        System.out.println("你输入的数字是"+num);
        {
            int cal=0;
            while (num!=1){
                cal++;
                switch(num%2){
                    case (0):
                        num=num/2;
                        break;
                    case(1):
                        num=3*num;
                        num++;
                        break;
                }

            }
            System.out.print("你砍了"+cal+"刀");
            {
                }
        }}}

加强题
分析以下需求,并用代码实现:        (1)按照从大到小的顺序输出四位数中的        个位+百位=十位+千位(3553,2332,1166,8228,3773)的数字及其总个数        (2)每行输出5个满足条件的数字, 数字之间用空格分隔        (3)如:9999 9988 9977 9966 9955
[Java] 纯文本查看 复制代码

public class Test03{
    public static void main (String[]args){
        int gw=0;
        int sw=0;
        int bw=0;
        int qw=0;
        int cnt=0;
        for (qw=9;qw>=0;qw--){
            for(bw=9;bw>=0;bw--){
                for(sw=9;sw>=0;sw--){
                    for(gw=9;gw>=0;gw--){
                        if (gw+sw==qw+bw&qw!=0){

                            System.out.print(qw+""+bw+""+sw+""+gw+",");
                            cnt++;
                            if (cnt == 5) {
                                System.out.println();
                                cnt = 0;
                            }

                        }
                    }
                }
            }
        }
    }
}














欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2