Java第三课

这篇博客详细介绍了Java的第三课内容,涵盖了标识符命名规则、数据类型、变量声明、运算符(包括位运算符和逻辑运算符)以及流程控制(条件结构和循环)。还通过实例讲解了如何求解数字各位之和,并讨论了switch-case与多重if的区别。此外,强调了在编程中运算符的优先级和类型转换的重要性。
摘要由CSDN通过智能技术生成

1 Java第三课

1.1 回顾:

  1. 标识符的命名:标识符通常意义上是指 类名,包名,方法名,属性名,普通变量等等.
  2. 变量命名规则:字母数字下划线以及$符号组成,不能以数字开头,不能使用java中的关键字,在同一个作用域中不能重复;有一定的含义,遵循骆驼命名方法。
  3. 数据类型:数据类型决定了一个变量在内存中存储空间的大小;常见(简单 基本)的数据类型:8个,byte,short,int,long,double,float,char,boolean ,每个类型占用的空间大小,数据值得范围: byte : -128~ 127
  4. 不同的类型之间需要转换: 简单类型之间的转换,前提,要求类型要兼容; 强制转换,显式转换; -> int a =(int) 12.3; 自动转换,隐式转换; double d = 12; //12. 0 int n = (int)false;
  5. 如何定义变量:
    先声明,再赋值:
    数据类型 变量名; // int n ; int n1,n2,n3;
    变量名= 值; n = 2;
    声明和赋值同时进行:
    int n = 2;
    int n1=1,n2,n3=2;
  6. 控制台输入:
    导入包:
    import java.util.Scanner;
    Scanner 对象名 = new Scanner(System.in);
    对象名.nextInt(); 对象名.nextFloat(); 对象名.nextDouble(); 对象名.next(); 对象名.nextChar();
  7. 常见的运算符:
    算术: + - * / % ,执行的是除法运算,结果是取得余数. 5%3 ->5/3
    比较(关系):== != > < >= <=
    赋值: =
    逗号: ,
    括号: ()

1.2 课堂的默写代码:

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个数字");
        int n1 = input.nextInt();
        System.out.println("请输入一个数字");
        int n2 = input.nextInt();
        int t = n1;
        n1 = n2;
        n2 = t;
        System.out.println("n1: " + n1 + ", n2 :" + n2);

    }
}

1.3 课后作业讲解:

预习作业: 引用类型,其他的运算符.
代码作业: 给一个5位数(12345),将各个位数的数字取出来,求和输出: 1+2+3+4+5的结果 15
提示:需要用到 %
12345%10 =>5
12345/10=>1234%10=>4
12345/100=>123%10=>3

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        /*
         * System.out.println(5/3); // 5/3 ->1 余数2 数学的算法: 1*3 = 3+2 = 5
         * System.out.println(5%3); //2
         * System.out.println(5.3/2);//如果运算符的左侧或者右侧有一个值为小数,结果为小数 2.65
         * System.out.println(5.3%2); //? 2*2 -> 5.3-4= >1.3
         */ Scanner input = new Scanner(System.in);
        System.out.println("请输入一个数字(5位数字)");
        int n1 = input.nextInt();
        // 12345
        // 将这个12345拆出来(个位 十 百 千 万)
        int g = n1 % 10; // 个 12345%10 => g=5
        int s = n1 / 10 % 10;// 十 s=12345/10=>1234%10= 4 s=4
        int b = n1 / 100 % 10; // 百 b =3
        int q = n1 / 1000 % 10; // 千 q = 2
        int w = n1 / 10000; // 万 w=1
        int sum = g + s + b + q + w;
        System.out.println(n1 + " 各个位数字的和是: " + sum);
    }
}

请输入一个数字(5位数字)
21123
21123 各个位数字的和是: 9

1.4 继续数据类型:

引用类型: 类 接口 枚举 注解 数组等
基本数据类型存储在栈中;引用类型存储在堆中;
• 在函数(方法)中定义的基本数据类型变量存储在栈中;

这里写图片描述

引用类型实例的成员变量,存储在堆中;

这里写图片描述

1.5 其他运算符

1.5.1 ++和—:

运算符放在变量前放在变量后
++++a ; 先自加,再引用a的值a++ ; 先引用a的值,然后在自加
–a ; 先自减,再引用a的值a– ;先引用a的值,然后再自减

(单目)来变量的基础上自加 1或者自减1 : a++ –a ;
无论是再前还是再后,最终的结果一定是+1或者-1

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // int n = 1;
        // ++n;
        // n++;
        // 最终结果
        // System.out.println("n : " + n);//? 2
        int n = 1;
        System.out.println("n : " + n++);// ? 1 输出的时候还是1, 但是输出完成了没这个n就变成了2
        System.out.println("n : " + ++n);// ? 3 此时是先自加2+1=>3,然后再输出

    }
}

1.5.2 关于位运算符:

如何用比较快速的方法得到2的4次方?
2<<3 <<向左移动三位
十进制的2转换为二进制10 > 位运算 10000 ->变成10进制

1.5.3 逻辑运算符

长发 | 170cm 要么长发,要么170cm ,两条件都不成立,则false 不管是否长发,两个判断都要有

长发 || 170cm 要么长发,要么170cm ,两条件都不成立,则false 如果长发,则170的条件就不判断了,直接结果true ,娶了她

长发 & 170cm 长发和170要同时满足,结果才为true &表示的非短路,长发要判断,170也要判断

长发 && 170cm 长发和170要同时满足,结果true &表示的短路,长发要判断如果为false,170就不判断

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // int n = 1;
        // ++n;
        // n++;
        // 最终结果
        // System.out.println("n : " + n);//? 2

        /*
         * int n = 1;
         * 
         * System.out.println("n : " + n++);// ? 1 输出的时候还是1, 但是输出完成了没这个n就变成了2
         * System.out.println("n : " + ++n);// ? 3 此时是先自加2+1=>3,然后再输出
         */

        /*
         * int n = 2; System.out.println(2 << 3);
         */

        /*
         * String fields01 = "长发飘飘"; int height = 170;
         * 
         * // 比较的是字符串是否相同(内容是否相等) System.out.println(fields01.equals("长发飘飘") & height ==
         * 170); //& 左侧为true,右侧也为true
         * 
         * System.out.println(fields01.equals("长发") && height == 170);//&&
         * 左侧为true,右侧也为true ,此时&&短路运算, 如果左侧为false,则右侧不执行
         */

        /*
         * int a = 1, b = 2, c = 3; System.out.println(a++ > b++ && --b < c++);
         * System.out.println("a: " + a + ", b:" + b + ",c:" + c ); // 2 3 3
         */

        // & 非短路的与
        /*
         * int a = 1, b = 2, c = 3; System.out.println(a++ > b++ & --b < c++);
         * System.out.println("a: " + a + ", b:" + b + ",c:" + c); // 2 2 4,
         */

        /*
         * int a = 1, b = 2, c = 3; System.out.println(a++ > b++ | --b < c++);
         * System.out.println("a: " + a + ", b:" + b + ",c:" + c); // 2 2 4
         */
        int a = 1, b = 2, c = 3;
        System.out.println(a++ < b++ || --b < c++);
        System.out.println("a: " + a + ", b:" + b + ",c:" + c); // 2 3 3

    }
}

1.5.4 小题目(逻辑运算符)

String是一个引用类型的变量;
如果引用的目标为null, 那么,java中的是不允许出现对象名.属性或者方法的;
&&: 如果左侧为false,则右侧不执行; false;
& :非短路 左侧为false ,右侧要执行, s.length() ; 此时会出现错误;

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {

        String s=null;
        System.out.println(s!=null&&s.length()>2);//false
        System.out.println(s!=null&s.length()>2); //异常

    }
}

这里写图片描述

1.5.5 运算符小结:

类型分: 赋值运算符(= += -= ….)/算术(+ - * / % ++ –) /逻辑(&& || ! & |)/关系(比较) (> < >= <= != ==) /位运算符(<<)
按照”目” :操作数 a+b => 双目/ a++ ,a – 单目/ 三目: 表达式1? 表达式2:表达式3 ;

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int max = a > b ? a : b;

        System.out.println("max:" + max);
    }
}

1.5.6 运算符-优先级描述

1 括号()、[]
2 正负号+、-
3 自增自减,非++、–、!
4 乘除,取余*、/、%
5 加减+、-
6 移位运算<<、>>、>>>
7 大小关系>、>=、<、<=
8 相等关系==、!=
9 按位与&
10 按位异或^
11 按位或|
12 逻辑与&&
13 逻辑或||
14 条件运算?:
15 赋值运算=、+=、-=、*=、/=、%=
16 位赋值运算&=、|=、<<=、>>=、>>>=

1.5.7 课堂练习:

1、 从控制台输入两个数字,求最大值输出
2、 从控制台输入三个数字,求最大值输出

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 语法正确,完整 ctrl+shift+o 导入需要的包,去除不需要的包
        Scanner input = new Scanner(System.in);
        System.out.println("请输入三个数字");
        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int max = a > b ? a : b; // max就是a和b中的最大值
        // 然后我们再用max和c去比较
        max = max > c ? max : c;
        System.out.println("max : " + max);
    }
}

1.6 流程控制

1.6.1 条件结构:

这里写图片描述
这里写图片描述
这里写图片描述

嵌套的if: 表达的是一种递进的关系
If(判断语句1)
{
If(判断语句2)
{
}
}

1.6.2 多重if的课堂代码:

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        /**
         * 使用多重if实现学生成绩的判断和奖励
         * 
         * @author Administrator
         *
         */
        // 定义变量存储成绩
        double score;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入成绩");
        score = input.nextDouble();
        // 90到100是一个区间,所以用&&
        // 应用场景: 多重if适合于多个条件;只有一个条件会满足(可能一个条件都不满足,else省略的情况);else可以省略的;
        // 是一个区间的判断;或者是某个值的判断 if(xx == yy)
        if (score >= 90 && score <= 100) {
            System.out.println("奖励Iphonex一部,再接再厉!");
        } else if (score >= 80) {
            System.out.println("奖励Ipad一部,再接再厉!");
        } else if (score >= 60) {
            System.out.println("奖励棒棒糖一枚,要努力咯,距离双打不远了");
        } else if (score < 60 && score > 0) {
            System.out.println("混合双打一顿,要努力咯~");
        } else {
            System.out.println("输入成绩有误,请重新输入");
        }
    }
}

1.6.3 课堂练习:

  1. 使用if完成三个数字中的最大值
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入三个数字");
        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();

        if (a > b) {
            // 此时a是ab中的最大值
            // 拿a再去和c比较就可以了
            if (a > c) {
                System.out.println("最大值是 a :" + a);
            } else {
                System.out.println("最大值是c: " + c);
            }
        } else {
            // 此时 b>=a
            // 我们再拿b去和c比较就可以了
            if (b > c) {
                System.out.println("最大值是 b :" + b);
            } else {
                System.out.println("最大值是c: " + c);
            }
        }
    }
}

  1. 使用多重if来计算某年中某个月份的天数(经典);

这里写图片描述

1.6.4 使用swtich-case 结构来实现如上练习

这里写图片描述

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 定义两个变量 分别表示年和月份
        int year, month;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入年和月份");
        year = input.nextInt();
        month = input.nextInt();
        input.close();
        // 判断月份
        switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            System.out.println("天数31天");
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            System.out.println("天数30天");
            break;
        case 2:
            // 判断是否是闰年
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                System.out.println("天数29天");
            } else {
                System.out.println("天数28天");
            }
            break;
        default:
            System.out.println("请输入正确的月份");
            break;
        }
    }
}

这里写图片描述

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // ① int n = 1;
        // ② int n = 2;
        // ③ ④ int n=5;
        /*
         * byte n = 1;
         * 
         * //switch中的表达式可以是byte/short/int/char/enum(jdk1.5)/String(jdk1.7) // 判断月份
         * switch (n) {
         * 
         * case 1: System.out.println("1"); break; case 2: System.out.println("2");
         * default: System.out.println("default"); break;
         * 
         * }
         */
        String str = "A";
        switch (str + "A") {
        case "A":
            System.out.println("A");
            break;
        case "B":
            System.out.println("B");
            break;

        default:
            break;
        }

    }
}

1.6.5 Switch-case和多重if有什么异同?

思奇:说的最多的话是什么? “忘了”
这里写图片描述
这里写图片描述

1.6.7 用循环来解决一些数学问题:

1+2+3+…+123:
分析: 循环要执行多少次? 123需要从1开始 2 3 ….123,我需要将每次的变量都累加起来;
这里写图片描述
这里写图片描述

1.6.8 求100以内的偶数和 ?

这里写图片描述

1.6.9 课堂练习:

  1. 求和,1+2+3+。。+100以内的奇数和;
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 1) {
                // 要的奇数 累加
                sum += i;
            }
        }
        System.out.println("100以内奇数和: " + sum);
    }
}
  1. 求1+2+3.+100和,要求跳过所有的3的倍数和5的倍数;(3同时5的倍数)
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        int sum2 = 0;
        for (int i = 1; i <= 100; i++) {
            if (!(i % 3 == 0 && i % 5 == 0)) {
                sum2 += i;
            }
        }
        System.out.println("sum2: " + sum2);

    }
}
  1. 求100-1000 以内的所有的水仙花(自己去查)数有哪些
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            // 将个位 十位 百位的值 取出来 ,求三次方
            int g = i % 10;
            int s = i / 10 % 10;
            int b = i / 100;
            if (g * g * g + s * s * s + b * b * b == i) {
                System.out.println("自恋数: " + i);
            }
        }
    }
}

1.7 总结:

  1. 条件分支:if if-else if-else if-else switch-case
  2. 循环: for 基本语法,执行过程,基本应用
  3. 运算符:重点逻辑运算符,了解位运算.
  4. 数据类型:基本类型 和引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值