Java学习的第三天

Java学习的第三天

今天的学习目标是Java的基本控制结构

1.算法的流程主要包括顺序,分支,循环三种控制结构,Java中的控制语句有以下几类

  • 分支结构:if-else;switch
  • 循环结构:while;do-while;for
  • 与循环转移(跳出循环有关的跳转语句):break;continue,return。
  • 异常信息有关的语句:try-catch-finally,throw

2.顺序结构:自上而下,一条语句执行完之后,下一条语句。通常形况下都是这样执行的。system.out.println()这样的语句。
3.分支结构:更具条件(表达式)来判断是否成立,如果成立执行某一条语句,否则执行另一条语句。

  • if-else语句:例题:通过键盘输入学生的成绩,并且判断输入的成绩是否在有效的范围内,如果有效,则输出,无效,则输出数据无效。if与else这种情况就导致只有两种情况,非黑即白。
public class IfElse {
    public static void main(String[] args) {
        System.out.println("请输入合适的数字:");
        Scanner scanner=new Scanner(System.in);
        int score = scanner.nextInt();
        if (score>0&&score<=100){
            System.out.println("得分:"+score);
        }else {
            System.out.println("数据无效");
        }
        scanner.close();
    }
}
结果是:
请输入合适的数字:
30
得分:30

请输入合适的数字:
600
数据无效
  • 多分支if-else语句:例题:键盘输入学生的成绩,可以判断出学生的成绩的等级。
public class StudentGrade {
    public static void main(String[] args) {
        System.out.println("请输入学生的得分0~100:");
        Scanner scanner=new Scanner(System.in);
        int score= scanner.nextInt();
        if (score<60){
            System.out.println("需要好好学习了,这次不及格");
        }else if (score>=60&&score<70){
            System.out.println("刚刚及格线,下次加油");
        }else if (score>=70&&score<80){
            System.out.println("继续努力,向着80前进");
        }else if (score>=80&&score<90){
            System.out.println("很不错的成绩,但是还不够完美");
        }else {
            System.out.println("牛逼!");
        }
        scanner.close();
    }
}
结果是:
请输入学生的得分0~10098
牛逼!
  • switch语句:
    1.switch语句中的每个case分支的动作都是以break语句作为结束的。这里的break语句是来终止switch语句的。(很重要)如果没有break语句,程序会继续执行下一个case分支中的动作,知道碰到一个break语句,或抵达了switch语句的结尾。
    2.switch的语句中的控制表达式必须是char,int,short或byte类型的,还有枚举类型(在jdk1.7时,可以为字符串类型)。case后面的常量表达式的类型必须与控制表达式的而类型相同
    3.例题:(一般情况下switch语句会伴随着随机数的出现)编写程序,更具运行时生成的随机数,显示当前喝酒的人。
    *随机函数:Math.random():产生一个[0,1)之间的随机数,此时的随机数是double类型的,大于等于0且小于1。所以Math.random()4+1的结果是0~5之间,但是不包括5,选择使用int强转,此时的整数就是包含:0,1,2,3,4
public class Drink {
    public static void main(String[] args) {
        System.out.println("摇色子,喝酒的人是:");
        //生成一个0~4随机数(5个数)
        int i=(int)(Math.random()*4+1);
        switch (i){
            case 0:
                System.out.println("小明");
                break;
            case 1:
                System.out.println("小红");
                break;
            case 2:
                System.out.println("小刚");
                break;
            case 3:
                System.out.println("张三");
                break;
            case 4:
                System.out.println("李四");
                break;
        }
    }
}
结果是:
摇色子,喝酒的人是:
小刚
随机的

4.switch语句中的default用法:当没有找到匹配的对象时,就会执行default的分支,这个时候,会注意default分支的位置,可以在前,可以在后,但是也会遇到break才会停下,一般情形况下,是在最后面。
在这里插入图片描述
在这里插入图片描述
4.循环结构:根据条件反复执行某些操作。

  • while循环语句:在while循环语句中,**若表达式的值为ture,则会重复执行循环体语句。**通常情况用来执行,未知次数的循环(不了解循环多少次才能完成任务),比如:面试题体中出现的一直输入数字,知道遇到的不是数字,才会结束循环。(hasNextDouble()方法)例题:编写程序,计算1+2+3+4+…+100。
public class Test3 {
    public static void main(String[] args) {
        int sum=0;//声明一个变量,记录求和
        int i=1;//声明一个基础数字,求和时1+2+.....
        while (i<=100){
            sum+=i;
            i++;
        }
        System.out.println("1到100之间求和结果为:"+sum);
    }
}
结果为:
1100之间求和结果为:5050
  • do-while语句:do-while语句与while语句的区别在于do-while的循环体至少被执行一次。相对于while语句而言,如果while(表达式)不满足要求,此时就不会执行循环体,但是对于do-while语句而言,会先执行一次循环体到循环体结束时,会去判断条件是否成立。例题:同上***(注意看while的条件所在位置,所以会至少被执行一次)***
  do {
            sum+=i;
            i++;
        }while (i<=100);
  • for循环语句。一般情况下,for循环分为两种情况:1.普通的for循环.2for-each循环(用来遍历数组,序列等)。普通的for循环需要明确的循环次数(也可以通过一些方法获取)。
    例题:使用for循环编写程序,计算整型数组中所有元素之和。【注意新名词数组】
public class TestFor {
    public static void main(String[] args) {
        int [] a={13,25,78,12};//题目所给的整形数组
        int sum=0;//声明一个变量,记录元素之和
        int count=0;//声明一个变量,用来记录数组里的每一个值
        //a.length用来计算数组的长度,确定for的循环次数(通过方法来获取for循环的次数)
        for (int i=0;i<a.length;i++){
            count=a[i];
            sum+=count;
        }
        System.out.println(sum);
    }
}
结果为:
123

例题:使用for-each循环语句实现上面例题的功能。
结果是一样的,需要来分析一下,首先,执行foreach循环时,会依次从数组(容器)中取出一个元素保存在冒号前面声明的变量中(变量需要在这里声明,不能提前声明,注意观察代码中的count变量),冒号后面的变量则是需要遍历的容器(该问题是数组a)。

public class TestFor {
    public static void main(String[] args) {
        int [] a={13,25,78,12};//题目所给的整形数组
        int sum=0;//声明一个变量,记录元素之和
        //int count=0;//声明一个变量,用来记录数组里的每一个值
        //a.length用来计算数组的长度,确定for的循环次数
        /*for (int i=0;i<a.length;i++){
            count=a[i];
            sum+=count;
        }*/
        for (int count:a){
            sum+=count;
        }
        System.out.println(sum);
    }
}
  • 循环的嵌套(多层循环),在经历学习Java的过程中,大多数都是双层for循环的嵌套。
    例题:计算1!+2!+3!+…+10!(分析该题目,首先需要知道!代表什么,阶乘—3!=321)sub=sub*j;//当循环进行了一次后,sub的值会发生变化
public class DoubleFor {
    public static void main(String[] args) {
        int sum=0;//用来所有阶乘求和
        //在for循环中,建议在表达式中声明变量,如:i;j...
        for (int i=1;i<=10;i++){
            //可以在for循环的第一层,获取到i的值为1到10
            int sub=1;//用来求单个阶乘
            for (int j=1;j<i;j++){
                //注意这里j是小于i,而不是小于10
                sub=sub*j;//当循环进行了一次后,sub的值会发生变化
            }
            sum+=sub;
        }
        System.out.println(sum);
    }
}
结果是:
409114

5.控制循环结构(break,continue面试会经常遇到)

  • 用使用break结束循环:break用于强制退出循环,且不执行循环中剩于的语句,break语句可以在while循环,do-while循环,for循环中使用。
    例题:编写程序,从键盘输入一个数,判断该数是否为素数。
    分析一下:素数:一个数只能被1和他的本身整除则该数为素数。判断一个数(假设为n)为素数,只需要看该数n能否被2~n-1的数整除,如果能,则不是素数,不能则为素数。
public class SuShu {
    public static void main(String[] args) 3{
        System.out.println("从键盘输入一个数字:");
        Scanner scanner=new Scanner(System.in);
        int element = scanner.nextInt();
        boolean flag=true;
        for (int i=2;i<element-1;i++){
            if (element%i==0){
                flag=false;
            }
        }
        if(flag){
            System.out.println("该数字是素数"+element);
        }else {
            System.out.println("该数字不是素数");
        }
        scanner.close();
    }
}
结果为:
从键盘输入一个数字:
3
该数字是素数3

从键盘输入一个数字:
55
该数字不是素数

通过题目,来解释一下,boolean型参数很重要,如果说,在 if (element%i==0)这个地方,判断出该数字不是素数,就输出的话,比如:55,就回输出两次结果,因为55=5*11,当for循环到5的时候会输出一次,11的时候也会输出一次。所以引入boolean型参数,没有输出,只需要用来标注,当循环结束时,此时flag的值是false,再去判断,falg的值,如果是true,则为素数,因为此时默认值就是true,当该数字进入循环时,没有被改变,那么证明就是素数,只有非素数才会被更改falg的值。

  • 使用continue结束本次循环:continue语句可以强迫程序跳转到循环的起始处,当程序运行到continue语句时,即会停止运行剩余的循环主体,而是回到循环的开始处继续运行(换句话而言,遇到continue时,就是跳出本次循环,不去执行continue下面的语句,进入下一次循环)
    例题:编写程序,输出1~100之间所有不能被3整除的数。
public class Test4 {
    public static void main(String[] args) {
        for (int i=1;i<=100;i++){
            if (i%3==0){
                continue;
            }
            System.out.println("1~100之间所有不能被3整除的数有:"+i);
        }
    }
}
结果太多就不全部显示
1~100之间所有不能被3整除的数有:1
1~100之间所有不能被3整除的数有:2
1~100之间所有不能被3整除的数有:4
1~100之间所有不能被3整除的数有:5
1~100之间所有不能被3整除的数有:7
1~100之间所有不能被3整除的数有:8
1~100之间所有不能被3整除的数有:10

通过题目,来解释一下:当从1开始去进行取模运算时(%),首先会在if语句中进行判断,遇到能被3整除数字时,会执行continue语句,此时跳出本次循环,进行下一次循环。例如:i=3时,此时满足if条件,执行continue,就不会向下去执行System.out.println(“1~100之间所有不能被3整除的数有:”+i)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值