[Day09] CH06:重复的力量——回圈(下)

昨天的小试身手大家写得如何呢?没有写出来也不要气馁哦,我们一起来看解答吧!

写法1:

public class SelectEven {
    public static void main(String[] args){
        for(int i = 1 ; i <= 100 ; i++){
            if(i % 2 == 0){
                System.out.printf("%d ", i);
            }
        }
    }
}

写法2:

public class SelectEven2 {
    public static void main(String[] args){
        for(int i = 2 ; i <= 100 ; i+=2){
            System.out.printf("%d ", i);
        }
    }
}

第一种写法是用到前几天教过的 if 判断式,判断是否为偶数,再将符合的印出。第二种写法是直接从 2 开始,每次加 2 印出偶数,你写的是哪一种呢?

昨天介绍了三种不同的回圈,有时候我们每一次回圈都需要判断多个条件哪一个成立,打个比方来说就像是老师改完一大堆考卷,需要统计级距人数时,就会遇到,这时候 switch 就会是很好用的工具。

import java.util.Scanner;

public class GradeClassification {
    public static void main(String[] args){
        int A = 0;  //90-100
        int B = 0;  //80-89
        int C = 0;  //70-79
        int D = 0;  //60-69
        int F = 0;  //0-59
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the grades: "); //Windows按下 Ctrl+z 终止,其他作业系统按下 Ctrl+d 终止
        while(sc.hasNext()){
            int grade = sc.nextInt();
            switch(grade / 10){
                case 9: //90-99
                case 10:    //100
                    A++;
                    break;  //exits switch

                case 8: //80-89
                    B++;
                    break;
                
                case 7: //70-79
                    C++;
                    break;

                case 6: //60-69
                    D++;
                    break;

                default:    //0-59
                    F++;
                    break;
            }
        }
        System.out.printf("A: %d%nB: %d%nC: %d%nD: %d%nF: %d%n", A, B, C, D, F);
        sc.close();
    }
}

首先我们从程序最开始看起,先初始化各个级距的个数为 0,接着读取输入直到按下终止键,这个终止键是在告诉电脑已经结束输入。我们使用 Scanner 中的 hasNext 方法,判断是否还有输入值,若还有就会回传 boolean 值 true,否则为 false(读到终止键)。

当我们读入成绩後,switch 会搭配 case 将成绩分类,switch 後面的括号会先执行,成绩除以 10 後的结果会落在 0 到 10 之间,再依照结果进入不同 case。若 case 为 9 或 10 就会执行 A++,下一行的 break 表示离开这一次的 switch,也就是会回到 switch 上一行的 while,因为若成绩介於 90 到 100 之间,就不可能进入其他 case,可以提早离开,判断下一个分数,若是没有 break,则执行完 A++ 後,会继续比对其他的 case 是否成立,虽然在这个程序结果一样,但其他程序可能就会导致答案错误。若分数低於 60 分,则逐一判断 case 皆不符合,就会落入最後的 default,执行 F++,再回到 while 回圈。

让我们再详细认识一下 break 和他的好朋友 continue。若我们今天印出 1 到 10 的数字,如果遇到 7 就表示找到幸运号码不用印出,break 和 continue 分别会有两种结果:

  • break

public class LuckyNum {
    public static void main(String[] args){
        for(int i = 1 ; i <= 10 ; i++){
            if(i == 7){
                break;
            }
            System.out.printf("%d ", i);
        }
    }
}
1 2 3 4 5 6
  • continue

public class LuckyNum2 {
    public static void main(String[] args){
        for(int i = 1 ; i <= 10 ; i++){
            if(i == 7){
                continue;
            }
            System.out.printf("%d ", i);
        }
    }
}
1 2 3 4 5 6 8 9 10

你发现差别了吗? break 执行後会直接离开回圈,後面的 8、9、10 都不会印出,但是 continue 执行完不会印出数字,只会回到 for 回圈的一开始,所以後面的数字还是会印出来。

今天的程序码比较多,还是建议大家可以自己打打看,回圈的介绍我们花了两天学习,这是程序中很重要的一部分,所以最後我们再来埋头苦干一下。

埋头苦干

输入一个正整数,印出该边长的等腰三角形。


<<:  [Tableau Public] day 9:分析前先处理一下原始资料吧

>>:  前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day9 发表文章页面

从零开始的8-bit迷宫探险【Level 27】神助攻-老弟帮我配个音效

奄奄一息的山姆躺在地上,脑海中浮现了人生跑马灯。 「我为什麽会在这里?我的梦想,终究只是梦想吧.....

打造你自己的 Hook ( Day19 )

在 Hook 概观 的文章中,曾经写过一个打造 Hook 的例子。复习一下,发现应该要修改命名为 u...

Day20-<router-link> 建立路由连结

前几天使用的router-link功能主要是产生超连结最基础的方式,但其实他有很多变化方式。 to属...

知识真的有办法管理吗?

开宗明义就以「知识」是什麽?作为开场序幕 你所认定的IT管理层面的知识是 资料库里的知识 学术篇章的...

想办法找找市场区隔吧!

什麽是市场区隔? 最早看到市场区隔这个词的时候 一直不知道算是名词还是动词 後来多看几次文章後慢慢了...