luogg_java重新学习_第二章02(流程控制及循环结构)

程序流程控制

  • 顺序结构
  • 分支结构:if-else,switch-case
  • 循环结构:while,do-while,for
if-else三种格式
1.
if(true){
    执行代码块;
}

2.
if(){
}else{
}

3.
if(){
}else if(){
}
...
else{
}
if-else的练习
//输入小明的成绩,并输出相应成绩对应的奖励
        //创建一个Scanner类的对象
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入小明的期末成绩");
        //调用此对象响应的方法,完成键盘输入的值得获取
        int score=sc.nextInt();
        if(score>100||score<0){
            System.out.println("你输入的数值有误,请重新输入");
        }else if(score==100){
            System.out.println("奖励一俩BMW");
        }else if(80<score&&score<=99){
            System.out.println("奖励一部iphone6s");
        }else if(60<score&&score<=80){
            System.out.println("奖励一本参考书");
        }else{
            System.out.println("什么都不奖励");
        }
        sc.close();
switch的用法
 switch(变量){
   case1case2:
   case3:
   default:
 }
  1. 根据变量的值,选择相应的case去判断,一旦满足case条件,就执行case的相应语句,如果没有break语句,会继续执行其下的case语句。
  2. default:是可选的,而且位置是灵活的。
  3. 变量可以是哪些类型?char,byte,short,int,枚举,String。
  4. case条件:其中条件只能是值,不能是取值范围。switch-case不能对区间进行判断。

for循环
  • for循环结构
  • 1.初始化条件
  • 2.循环条件
  • 3.迭代条件
  • 4.循环体
public static void main(String[] args) {
        int j=1;
        for(System.out.println('a');j<3;System.out.println('b'),j++){
            System.out.println('c');//acbcb
        }
//输出100以内所有偶数 并计算其和 并说出其偶数的个数
        int sum=0;
        int count=0;
        for(int i=1;i<=100;i++){
            if(i%2==0){
                System.out.println(i);
                sum+=i;
                count++;
            }
        }
        System.out.println("总和为"+sum);//2550
        System.out.println("100以内偶数的个数为"+count);//50
    }
//编写程序,从1循环到150在每行打印一个值,并在3的倍数后边打印foo,
        //5的倍数后边打印biz,7的倍数后边打印baz
        for(int a=1;a<=150;a++){
            System.out.print(a);

            if(a%3==0){
                System.out.print("foo ");
            }
            if(a%5==0){
                System.out.print("biz ");
            }
            if(a%7==0){
                System.out.println("baz");
            }
            System.out.println();
        }

水仙花数

//输出一个水仙花数,水仙花数就是一个3位数,
        //其各个位上的数字立方和其本身
        //例如:153=1*1*1+5*5*5+3*3*3
        for(int i=100;i<=999;i++){//遍历所有的三位数    456
            int j1=i/100;//百位
            int j2=(i-j1*100)/10;//十位
            int j3=i%10;//个位
            if(i==j1*j1*j1+j2*j2*j2+j3*j3*j3){
                System.out.print(i+" ");//153 370 371 407
            }
        }

while循环

  • 1.初始化条件
  • 2.循环条件
  • 3.迭代条件
  • 4.循环体
  初始化条件
  while(循环条件){
     循环体
     迭代条件
  }
  • for循环与while循环可以相互转换。
  • while与for的区别:while的初始化条件定义在外边,for定义在内部,初始化条件在执行完循环以后还可以用,而for不可以用。
// 100以内的偶数的输出,以及它们的和
        int i = 1;
        int sum = 0;
        while (i <= 100) {
            if (i % 2 == 0) {
                System.out.println(i);
                sum += i;
            }
            i++;
        }
        System.out.println(sum);

do-while(用的少)

  • 1.初始化条件
  • 2.循环条件
  • 3.迭代条件
  • 4.循环体
初始化条件
    do{
        循环体
        迭代条件
    }while(循环条件);
  • do-while与while的区别:do-while循环至少会执行一次

循环练习

//从键盘读入个数为10个的整数,并判断读入的正数和负数的个数
        Scanner s = new Scanner(System.in);
        int a = 0;//记录正数的个数
        int b = 0;//记录负数的个数
        int c = 0;//记录0的个数
        for(int i = 1;i <= 10;i++){
            System.out.println("请输入第"+i+"个整数");
            int num = s.nextInt();
            if(num > 0){
                a++;
            }else if(num < 0){
                b++;
            }else if(num == 0){
                c++;
            }
        }
        System.out.println("正数的个数为"+a);
        System.out.println("负数的个数为"+b);
        System.out.println("0的个数为"+c);
        s.close();
//从键盘输入个数不确定的数,并判断读入的正数和负数的个数,输入0时结束程序
        Scanner s = new Scanner(System.in);
        int a = 0;//记录正数的个数
        int b = 0;//记录负数的个数
        for(;;){
            System.out.println("请输入一个整数:");
            int num = s.nextInt();
            if(num > 0){
                a++;
            }else if(num < 0){
                b++;
            }else{
                break;
            }
        }
        System.out.println("正数的个数为:"+ a);
        System.out.println("负数的个数为:"+ b);
        s.close();
  • 无限循环for(;; ) while(true)
  • 一般情况下,在无限循环的内部要有程序终止的语句,break,若没有就是死循环了。

循环的嵌套使用

        /*
            *****
            *****
            *****
         */
        for (int j = 1; j <= 4; j++) {// 外层循环控制行数
            for (int i = 1; i <= 5; i++) {// 内层循环控制列数
                System.out.print("*");
            }
            System.out.println();
        }
    /*
            *
            **
            ***
            ****
        */

        for (int j = 1; j <= 4; j++) {
            for(int i = 1;i<=j;i++){
                System.out.print("*");
            }
            System.out.println();
        }
        /*
            ****
            ***
            **
            *
         */
        for (int j = 1; j <= 4; j++) {
            for(int i = 4;i>=j;i--){
                System.out.print("*");
            }
            System.out.println();
        }
/*
                ----*
                ---* *
                --* * *
                -* * * *
                * * * * *
                -* * * *
                --* * *
                ---* *
                ----*
         */
        //上半部分
        for(int i = 1;i <= 5;i++){
            for(int j = 4;j >= i;j--){
                System.out.print(" ");
            }
            for(int k = 1;k <= i;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
        //下半部分
        for(int i = 1;i <= 4;i++){
            for(int j = 1;j <= i;j++){
                System.out.print(" ");
        }
            for(int k = 4;k >= i;k--){
                System.out.print("* ");
            }
            System.out.println();
        }
//打印九九乘法表
        for(int i = 1;i <= 9;i++){
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + j*i + "\t");
            }
            System.out.println();
        }

打印100以内所有的质数

//打数印100以内所有质数
        //质数:除了1和他本身以外不能再被其他数整除
        boolean flag = false;
        for(int i = 2;i <= 100;i++){//实现100以内自然数遍历
            for(int j = 2;j < i;j++){
                if(i % j == 0){
                    flag = true;
                }
            }
            if(flag == false){
                System.out.println(i);
            }
            flag = false;
        }
 测试完成求 1-10w 所有质数 所用的毫秒数
 long start = System.currentTimeMillis();
        boolean flag = false;
        for(int i = 2;i <= 100000;i++){//实现100以内自然数遍历
            for(int j = 2;j < i;j++){
                if(i % j == 0){
                    flag = true;
                }
            }
            if(flag == false){
                System.out.println(i);
            }
            flag = false;
        }
        long end = System.currentTimeMillis();
        System.out.println("完成操作所用的毫秒数为:"+ (end-start));//51305

费时太多,需要优化,首先在flag底下加break,然后将flag==false改为!flag,再将j

long start = System.currentTimeMillis();
        boolean flag = false;
        for(int i = 2;i <= 100000;i++){//实现100以内自然数遍历
            for(int j = 2;j <= Math.sqrt(i);j++){//判断根号i
                if(i % j == 0){
                    flag = true;
                    break;
                }
            }
            if(!flag){
                System.out.println(i);
            }
            flag = false;
        }
        long end = System.currentTimeMillis();
        System.out.println("完成操作所用的毫秒数为:"+ (end-start));//51305
        //加上break之后,4796,使用Math.sqrt()之后,270毫秒

break与continue

/*
         * break:结束"当前"循环。 
         * continue:跳出"本次"循环,继续下一次循环。
         */
        for (int i = 1; i <= 10; i++) {
            if(i % 4 == 0){
                //break;//1,2,3
                continue;//1,2,3,5,6,7,9,10
            }
            System.out.println(i);
        }
  • break和continue语句之后不能再添加其他语句,因为不可能被执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值