Browse Source

2025年11月29日-代码

WanJL 1 week ago
parent
commit
b6aba520ee

+ 66 - 0
javase/src/sf/j251129/Demo01.java

@@ -0,0 +1,66 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo01
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo01 {
+    /*
+        java中的一些数据类型是可以相互转换的,
+        byte类型的值转换为int类型,或者double类型
+        转换的方式分为两种:
+            自动类型转换---隐式转换
+            强制类型转换---显式转换
+
+        隐式转换:
+            把一个表示数据范围小的数值(或者变量)赋值给另一个表示范围大的变量。
+            byte a=15;
+            int b=a;    //把a赋值给b
+            这种转换就是隐式转换
+
+            byte  -->   short  -->  int  -->  long  -->  float  --> double
+                        char   -->
+
+        显式转换
+            把一个表示数据范围大的数值(变量)赋值给另一个表示范围小的变量。
+            强制类型转换的格式:
+                目标数据类型 变量名 = (目标数据类型) 值或者变量;
+
+     */
+    public static void main(String[] args) {
+        //Java中所有的整数默认都是int类型
+        //int的表示范围要小于double类型
+        //double a=15;    //定义了一个15值,是整数类型。赋值给double类型的变量
+
+        byte b1=15; //byte类型
+        byte b2=20; //byte类型
+        //b1是byte,b2是byte,但是两个变量相加的结果是整数数值,这个数值就是int类型
+        //byte b3=b1+b2;
+
+        //强制类型转换
+
+        int a=15;   //表示范围大的
+        //目标数据类型 变量名 = (目标数据类型) 值或者变量;
+        byte          b3   = (byte)          a;
+
+        //byte -128~127
+
+        int a1=130;
+        byte b4=(byte) a1;
+        System.out.println(b4); //b4=?
+        //是二进制
+        // 130 --> 0000 0000 0000 0000 0000 0000 1000 0010
+        // 1000 0010 ---> -126
+        //二进制最左边的是最高位也就是符号位,符号位为0,则是正数,为1是负数
+
+        byte by1=3;
+        byte by2=6;
+        //byte by3=by1+by2;   //错误,两个byte类型变量相加,会提升为int类型
+        byte by4=3+10;   //  正确,有一个【常量优化机制】
+        //计算机在进行整数常量计算的时候会直接计算出结果,并且会自动判断这个结果是否在byte的取值范围内
+
+    }
+}

+ 65 - 0
javase/src/sf/j251129/Demo02.java

@@ -0,0 +1,65 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo02
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo02 {
+    /*
+        运算符:对常量或变量进行操作的符号
+        表达式:用运算符把常量或变量连接起来,符合Java语法的式子,就是表达式。
+        不太的运算符连的表达式体系的是不同类型的表达式。
+        int a=10;
+        int b=20;
+        int c=a+b;
+        +是运算符,并且是算术运算符
+        a+b就是表达式,因为+是算术运算符,所以表达式称为算术表达式
+
+        算术运算符:
+            +   加号
+            -   减号
+            *   乘号
+            /   除号
+            %   取余 取模   获取的是两个数据进行除法后得到的余数
+
+            /和%是有区别的:两个数据做除法, /是获取结果的商,%是获取结果的余数
+            整数之间进行算术运算,只会得到整数,如果想得到小数,就需要使用浮点类型数据参与运算。
+            ++ 自增   变量值+1
+            -- 自减   变量值-1
+
+            参与操作的话,符号如果放在变量的后面,会先拿变量参与操作,后拿变量做++或--运算
+                        符号如果放在变量的前面,先拿变量做++或--运算,后拿变量参与操作
+     */
+    public static void main(String[] args) {
+        int a=10;
+        int b=3;
+        System.out.println(a/b);
+        System.out.println(a%b);
+        // 除了整数类型和小数类型之外,char类型也是可以进行算术运算的
+        char c='a';
+        System.out.println(c+0);
+        System.out.println(c+1);
+        //当+操作中出现了字符串的时候,+就是变为连接符,而不是运算
+
+        String s="15";
+        System.out.println(s+15);
+
+
+        int a1=10;
+        a1++;
+        System.out.println(a1);
+        int a2=10;
+
+        ++a2;
+        System.out.println(a2);
+
+        int x=10;
+        int y=x++ + x++ + x++;  //10    + 11 + 12
+        System.out.println(y);
+    }
+
+
+}

+ 28 - 0
javase/src/sf/j251129/Demo03.java

@@ -0,0 +1,28 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo03
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo03 {
+    /*
+        赋值运算符
+            作用就是将一个表达式的值,赋值给左边,左边必须是可以修改的,不能是常量。
+            =   赋值   把=右边的常量或变量或表达式赋值给=左边
+            +=  加后赋值    a+=b,将a+b的结果赋值给a
+            -=  减后赋值    a-=b,将a-b的结果赋值给a
+            *=  乘后赋值    a*=b,将a*b的结果赋值给a
+            /=  除后赋值    a/=b,将a/b的结果赋值给a
+            %=  取余后赋值   a%=b,将a%b的结果赋值给a
+     */
+    public static void main(String[] args) {
+        byte a=127;
+        //a=a+10;    //报错,因为运算中a提升为int类型,运算结果是int类型的值赋值给byte类型的a,可能会损失精度
+        a+=130;  //这段代码就不会报错,因为它隐含了强制类型转换
+        System.out.println(a);
+
+    }
+}

+ 41 - 0
javase/src/sf/j251129/Demo04.java

@@ -0,0 +1,41 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo04
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo04 {
+    /*
+        关系运算符
+        ==  等于      a==b    判断a和b的值相等是否成立,成立则返回true,否则返回false
+        !=  不等于    a!=b     判断a和b的值不相等是否成立,成立则返回true,否则返回false
+        >   大于      a>b     判断a大于b是否成立,成立则返回true,否则返回false
+        <   小于      a<b     判断a<b是否成立,成立则返回true,否则返回false
+        <=  小于等于   a<=b     判断a<=b是否成立,成立则返回true,否则返回false
+        >=  大于等于   a>=b   判断a>=b相等是否成立,成立则返回true,否则返回false
+
+        关系运算符的记过都是boolean类型值,要么是true,要么是false。
+     */
+    public static void main(String[] args) {
+        int a=10;
+        int b=20;
+        //快捷方式:sout+回车键
+        //==
+        //!=
+        //>
+        //<
+        //<=
+        //>=
+
+
+
+
+
+
+
+
+    }
+}

+ 62 - 0
javase/src/sf/j251129/Demo05.java

@@ -0,0 +1,62 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo05
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo05 {
+    /*
+        逻辑运算符
+        是吧各个运算的关系表达式连接起来,组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是true或false
+        &   逻辑与 a&b a和b的值都是true,结果就是true,否则结果为false
+        |   逻辑或 a|b a和b的值都是false,结果就是false,否则结果为true
+        ^   逻辑亦或    a^b,a和b的值不同,结果就是true,相同就是false
+        !   逻辑非     !a,运算结果和a的值相反
+
+        &&  短路与 作用和&相同,但是有短路效果
+        ||  短路或 作用和|相同,但是有短路效果
+     */
+    public static void main(String[] args) {
+        int i=10;
+        int j=20;
+        int k=30;
+        //&   逻辑与 a&b a和b的值都是true,结果就是true,否则结果为false
+        System.out.println((i>j)&(j>k));    //false & false 输出 false
+        System.out.println((i<j)&(j>k));    //true & false 输出 false
+        System.out.println((i>j)&(j<k));    //false & true 输出 false
+        System.out.println((i<j)&(j<k));    //true & true 输出 true
+        //|   逻辑或 a|b a和b的值都是false,结果就是false,否则结果为true
+        System.out.println((i>j)|(j>k));    //false | false 输出 false
+        System.out.println((i<j)|(j>k));    //true | false 输出 true
+        System.out.println((i>j)|(j<k));    //false | true 输出 true
+        System.out.println((i<j)|(j<k));    //true | true 输出 true
+        //^   逻辑亦或    a^b,a和b的值不同,结果就是true,相同就是false
+        System.out.println((i>j)^(j>k));    //false ^ false 相同则输出 false
+        System.out.println((i<j)^(j>k));    //true ^ false 不同则输出 true
+        System.out.println((i>j)^(j<k));    //false ^ true 不同则输出 true
+        System.out.println((i<j)^(j<k));    //true ^ true 相同则输出 false
+        //!   逻辑非     !a,运算结果和a的值相反
+        System.out.println((i>j));    //false
+        System.out.println(!(i>j));    //!false 输出true
+
+        //短路操作可以提高效率
+
+        //&&  短路与 作用和&相同,但是有短路效果
+        //&&短路效果:如果符号左边的表达式的结果为false,就右边就不执行了,直接返回false
+        System.out.println((i>j)&&(j>k));    //false & false 输出 false
+        System.out.println((i<j)&&(j>k));    //true & false 输出 false
+        System.out.println((i>j)&&(j<k));    //false & true 输出 false
+        System.out.println((i<j)&&(j<k));    //true & true 输出 true
+        //||  短路或 作用和|相同,但是有短路效果
+        //  ||如果符号左边表达式结果为true,右边就不执行了,直接返回true
+        System.out.println((i>j)||(j>k));    //false | false 输出 false
+        System.out.println((i<j)||(j>k));    //true | false 输出 true
+        System.out.println((i>j)||(j<k));    //false | true 输出 true
+        System.out.println((i<j)||(j<k));    //true | true 输出 true
+
+
+    }
+}

+ 47 - 0
javase/src/sf/j251129/Demo06.java

@@ -0,0 +1,47 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo06
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo06 {
+    /*
+        三元运算符(三目运算符)
+        格式:
+            布尔表达式 ? 表达式1:表达式2
+            问号前面的位置是一个运算结果为布尔值的表达式,结果要么是true要么是false。
+            如果结果为true,则执行表达式1
+            如果结果为false,则执行表达式2
+
+     */
+    public static void main(String[] args) {
+        int a=10;
+        int b=15;
+        System.out.println(a>b?"hello":123456);
+        /*
+            有三位同学,身高分别是150cm、160cm、170cm,请用程序实现获取三位同学的最高身高
+
+         */
+        int s1=150,s2=160,s3=170;
+        int temp=s1>s2?s1:s2;
+        int max=temp>s3?temp:s3;
+        System.out.println("身高最高的人是:"+max);
+
+        //1、使用三元运算符判断一个整数是奇数还是偶数,输出对应的描述(如"15是奇数"、"20是偶数")
+        int a1=20;
+        System.out.println(a1%2==0?a1+"是偶数":a1+"是奇数");
+
+        //2、使用三元运算符找出三个整数100、200、253中的最大值和最小值,分别输出。
+        int i1=100,i2=200,i3=253;
+        int t=(i1>i2?i1:i2);
+        int max1=t>i3?t:i3;
+        t=(i1<i2?i1:i2);
+        int min=t<i3?t:i3;
+        System.out.println("最大值是:"+max1);
+        System.out.println("最小值是:"+min);
+
+    }
+}

+ 52 - 0
javase/src/sf/j251129/Demo07.java

@@ -0,0 +1,52 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo07
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo07 {
+    /*
+        分支结构--if语句
+        格式:
+            if(布尔表达式){
+                语句....
+            }
+        步骤:
+            1、先计算布尔表达式的结果
+            2、如果结果为true,则执行语句...
+            3、如果结果为false,则不执行语句,跳过语句继续执行后面的内容
+        if...else语句
+        格式:
+            if(布尔表达式){
+                语句1....
+            }else{
+                语句2...
+            }
+            如果布尔表达式的结果为true则执行语句1否则执行语句2.
+
+
+        练习:
+        1、任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出。
+        2、任意给出一个整数,请用程序实现判断该整数是正数还是负数,并在控制台输出。
+
+        if...else...if
+        格式:
+            if(布尔表达式1){
+                语句1....
+            }else if(布尔表达式2){
+                语句2....
+            }else{
+                语句n...
+            }
+        练习:
+            定义一个在0~100之间的变量a, 90~100优秀,80~89良好,70~79中等,60~69及格,0~59请努力加油!
+     */
+    public static void main(String[] args) {
+        int a=78;
+
+    }
+
+}

+ 57 - 0
javase/src/sf/j251129/Demo08.java

@@ -0,0 +1,57 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo08
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo08 {
+    /*
+        分支结构--switch语句
+        格式:
+            switch(表达式){
+                case 1:
+                    语句1;
+                    break;
+                case 2:
+                    语句2;
+                    break;
+                ....
+                default:
+                    语句n;
+                    break;
+            }
+        练习:
+            星期一~星期日,用1~7表示,显示今天的减肥活动
+                周一:跑步
+                周二:游泳
+                周三:慢走
+                周四:动感单车
+                周五:拳击
+                周六:爬山
+                周日:好好吃一顿
+            星期一~星期日,用1~7表示,给定一个星期数
+            输出是工作日还是休息日。(1-5)工作日,(6-7)休息日
+     */
+    public static void main(String[] args) {
+        int a=6;
+        switch (a){
+            case 1:
+            case 2:
+            case 3:
+            case 4:
+            case 5:
+                System.out.println("工作日");
+                break;
+            case 6:
+            case 7:
+                System.out.println("休息日");
+                break;
+            default:
+                System.out.println("输入有误");
+        }
+
+    }
+}

+ 53 - 0
javase/src/sf/j251129/Demo09.java

@@ -0,0 +1,53 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo09
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo09 {
+    /*
+        循环结构分为三种:for、while、do...while
+        for循环:
+            for(初始化语句;条件判断语句;条件控制语句){
+                循环体
+            }
+            1、执行初始化语句
+            2、执行条件判断语句,看结果是true还是false
+                |-true,继续执行
+                |-false,结束循环
+            3、执行循环体
+            4、执行条件控制语句
+            5、回到2继续执行
+        练习:
+            1、在控制台中输出1~5和5~1
+            2、求1-5之间的数据和,并把求和结果在控制台输出
+            3、求1-100之间的偶数和,并把求和结果在控制台输出
+
+            4、在控制台中输出1000以内的所有水仙花数
+                    水仙花数指的是一个三位数,个位、十位、百位的数字的3次方等于这个数本身
+                    比如 153  = 1*1*1+5*5*5+3*3*3
+     */
+    public static void main(String[] args) {
+        int count=0;
+        for (int i = 100; i < 1000; i++) {
+            //计算之前先获取每个位上的值
+            int ge=i%10;
+            int shi=i/10%10;
+            int bai=i/100%10;
+            //判断,把个位、十位、百位取出来计算立方,看和原始数字是否相等
+            if (ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
+                //System.out.println(i);
+                System.out.print(i+" ");    //输出但是不换行
+                count++;    //每次找到了水仙花数就计数+1
+                //如果计数是2的倍数,就换行
+                if (count%2==0){
+                    System.out.println();
+                }
+            }
+        }
+
+    }
+}

+ 48 - 0
javase/src/sf/j251129/Demo10.java

@@ -0,0 +1,48 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo10
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo10 {
+    /*
+        循环结构-while循环
+        格式:
+            初始化语句;
+            while(条件判断语句){
+                循环体;
+                条件控制语句;
+            }
+
+            1、执行初始化语句
+            2、执行条件判断语句,看结果是true还是false
+                |-true,继续执行
+                |-false,结束循环
+            3、执行循环体
+            4、执行条件控制语句
+            5、回到2继续执行
+        练习:
+            世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。
+            请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
+     */
+    public static void main(String[] args) {
+        //定义一个计数器
+        int count = 0;
+        //纸张厚度
+        double paper=0.1;
+        //珠峰高度
+        int zf=8844430;
+        // 因为要反复折叠,所以要使用循环。但是不知道要折叠多少次,所以这种情况更适合使用while循环
+        //折叠的过程中当纸张的厚度大于珠峰高度就停止,也就是结束循环
+        while(paper<=zf){
+            //循环的执行,每次纸张折叠,厚度都加倍
+            paper*=2;
+            //循环次数累加
+            count++;
+        }
+        System.out.println("一共需要折叠"+count+"次");
+    }
+}

+ 44 - 0
javase/src/sf/j251129/Demo11.java

@@ -0,0 +1,44 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo11
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo11 {
+    /*
+        循环结构-do...while循环
+        初始化语句;
+        do{
+            循环体;
+            条件控制语句;
+        }while(条件判断语句);
+
+        do...while和while循环不一样的地方:
+            无论条件判断语句的结果是否为true,循环体都要执行一次。
+
+        三种循环的区别:
+            for循环和while循环都是先判断条件是否成立,然后再决定要不要执行循环体----先判断后执行。
+            do..while循环是先执行一次循环体,再判断条件是否成立,是否继续执行循环体---先执行后判断。
+
+            for:条件控制语句所控制的自增变量,因为是归属于for循环语法结构的,所以在for循环结束后,就不能访问了。
+            while:条件控制语句控制的自增变量,对于while循环来说,不归属于语法结构的,所以在while循环结束后,可以继续使用这个变量。
+     */
+    public static void main(String[] args) {
+        //死循环
+        /*
+            for (;;){
+                System.out.println("死循环.....");
+            }
+
+            while(true){
+                System.out.println("死循环....");
+            }
+            do {
+                System.out.println("死循环");
+            } while (true);
+         */
+    }
+}

+ 74 - 0
javase/src/sf/j251129/Demo12.java

@@ -0,0 +1,74 @@
+package sf.j251129;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo12
+ * @description
+ * @create 2025/11/29
+ */
+public class Demo12 {
+    /*
+
+            //if (i==500) //如果if语句或for循环语句,没有大括号,那么这个if或for只对下一行有效
+            //System.out.println("----"+i);
+            //System.out.println(i);
+
+        跳转循环语句
+            break---跳出循环,结束循环
+            continue--跳过本次循环,继续执行下次循环
+     */
+    public static void main(String[] args) {
+        /*
+            for (int i = 0; i < 1000; i++) {
+                if (i==100){
+                    break;
+                }
+                System.out.println(i);
+            }
+
+
+            for (int i = 0; i < 1000; i++) {
+                if (i%2==0){
+                    continue;   //当满足所在的if语句的条件的时候,就跳过本次循环,继续下一次循环
+                }
+                System.out.println(i);
+            }
+            练习题:
+
+
+
+        //如果是多重循环嵌套,那么使用break或continue的时候,可以选择跳转哪一层循环
+
+        a:for (int i = 0; i < 10; i++) {
+            b:for (int j = 0; j < 10; j++) {
+                if (i == 5 && j == 5) {
+                    break b;
+                }
+                System.out.print("j="+j+" ");
+            }
+            System.out.println(",i="+i);
+        }
+
+         */
+        //1、百鸡问题,一只公鸡5元,1只母鸡3元,小鸡1元3只,要求用100元买100只鸡,要求计算出所有的采购方案。
+        int gong=5,mu=3;
+        for (int i = 1; i < 100; i++) {
+            for (int j = 0; j < 33; j++) {
+                for (int k = 0; k < 100; k+=3) {
+                    if (gong*i+mu*j+k/3==100&&i+j+k==100){
+                        System.out.println("公鸡:"+i+"只,母鸡:"+j+"只,小鸡:"+k+"只");
+                    }
+                }
+            }
+        }
+        //2、鸡兔同笼:一只笼子中共有9个头和26只脚,要求计算出该笼子中有几只兔子几只鸡。并且将结果在控制台输出
+        for (int ji = 0; ji < 9; ji++) {
+            for (int tu = 0; tu < 9; tu++) {
+                if (ji*2+tu*4==26&&ji+tu==9){
+                    System.out.println(ji+"只鸡,"+tu+"只兔");
+                }
+            }
+        }
+    }
+}