精华内容
下载资源
问答
  • 2021-05-09 20:10:40

    JAVA小白编程题练习

    可能有很多刚入门的小白不知道自己如何能快速提升编程技巧与熟练度
    其实大佬进阶之路只有一个~ 那就是疯狂码代码!!!实践出真知!!!
    所以为了大家能够想练习的时候有素材,泡泡给大家整理了一些练习题
    由于平时比较忙,所以我在不定时努力更新中,欢迎监督~
    500是立的Flag啊哈哈哈哈,我们共同努力吧,本帖已满,以下为第二个练习帖的链接:

    练习帖2 点我点我

    希望能给大家带来帮助~ 😃😃😃

    文章目录

    练习题:通过代码编写,输出一句话:“我要开始学习JAVA了,今天又是知识量满满的一天~”

    package cn.cxy.exec;
    
    public class TestPrint {
        public static void main(String[] args) {
            System.out.println("我要开始学习JAVA了,今天又是知识量满满的一天~");
        }
    }
    

    练习题:打印个人信息案例,将一个人的一些个人信息打印输出

    package cn.cxy.exec;
    
    public class TestPrint2 {
        public static void main(String[] args) {
            System.out.println("海绵宝宝");//字符串类型,我是海绵宝宝
            System.out.println(3);//整数类型,今年3岁了
            System.out.println("海底");//字符串类型,我的家在海底
            System.out.println(true);//布尔类型,吃饭了吗?吃啦,吃的蟹黄堡
            System.out.println(10.99);//浮点类型,今天还收到了10.99的红包
        }
    }
    

    练习题:拼接打印:输出:XXX:这是我学习JAVA的第X年,我的期望薪资是XXX

    package cn.cxy.exec;
    
    public class TestPrint3 {
        public static void main(String[] args) {
            //1.定义变量保存姓名
            String name = "派大星";
            //2.定义变量保存年份
            int year = 1;
            //3.定义变量保存期望薪资
            double salary = 10000.0;
            //4.拼接打印目标结果
            System.out.println(name+":这是我学习JAVA的第"+year+"年,我的期望薪资是"+salary);
        }
    }
    

    练习题:定义两个整数,计算这两个整数加减乘除运算的结果,并把结果打印到控制台

    package cn.cxy.exec;
    
    public class TestPrint4 {
        public static void main(String[] args) {
            //1.定义变量保存要计算的第一个数
            int number1 = 1;
            //2.定义变量保存要计算的第二个数
            int number2 = 2;
            //3.打印输出这两个数计算的结果
            System.out.println(number1+number2);
        }
    }
    

    练习题:预测身高案例:

    其实我们可以通过父母的身高大致推断出子女的身高,假定父母与子女的身高遗传关系如下:
    ​ 儿子身高(厘米)=(父亲身高+母亲身高) ×1.08÷2
    ​ 女儿身高(厘米)=(父亲身高×0.923+母亲身高) ÷2
    那已知:现有父亲身高175CM,母亲身高160CM。
    请将预测的子女身高打印输出

    package cn.cxy.exec;
    
    public class TestPrint5 {
        public static void main(String[] args) {
            //1.定义变量保存父亲的身高
            double fatherHeight = 175;
            //2.定义变量保存母亲的身高
            double motherHeight = 160;
            //3.计算儿子身高
            double sonHeight = (fatherHeight + motherHeight) * 1.08 / 2;
            //4.计算女儿身高
            double daughterHeight = (fatherHeight * 0.923 + motherHeight) / 2;
            //5.打印输出最终计算的结果
            System.out.println("儿子预计身高" + sonHeight + "厘米");
            System.out.println("女儿预计身高" + daughterHeight + "厘米");
        }
    }
    

    练习题:逻辑判断

    已知小红同学有25元,她攒了几天钱之后发现自己的现在的钱比原来的2倍还多出10块。而小蓝同学有30元,他攒了几天钱之后发现自己的钱正好是原来的2倍。于是小胖说:小红和小蓝现在的钱一样多,请问,他说的对吗?

    package cn.cxy.exec;
    
    public class TestPrint4 {
        public static void main(String[] args) {
            //1.定义变量保存小红原来的钱数
            int red = 25;
            //2.定义变量保存小蓝原来的钱数
            int blue = 30;
            //3.求小红同学现在的钱数
            red = red * 2 + 10;
            //4.求小蓝同学现在的钱数
            blue *= 2; //这是一种简写形式,等同于blue = blue *2;
            //5.判断并输出两个人的钱是否相等
            System.out.println(red == blue);
        }
    }
    

    练习题:最优选择

    某小伙想定一份外卖,商家的优惠方式如下:鱼香肉丝单点24元,油炸花生米单点8元,米饭单点3元。订单满30元8折优惠。鱼香肉丝优惠价16元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱?

    public class Demo3 {
        public static void main(String[] args) {
            //1.求不使用优惠时的总价
            double money1 = 24 + 8 + 3;
            //2.判断折后总价
            money1 = (money1 <= 30 ? money1 : money1 * 0.8);
            //3.求使用优惠时的总价
            double money2 = 16 + 8 + 3;
            //4.判断两种花费哪个更少
            double money = money1 < money2 ? money1 : money2;
            //5.打印最终花费
            System.out.println(money);
        }
    }
    

    练习题: 接收用户输入的3个整数,并将它们的最大值作为结果输出

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class GetMaxNumber {
        public static void main(String[] args) {
            //1.提示并接收用户输入的三个整数,并交由变量a b c来保存
            System.out.println("请输入第一个整数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("请输入第二个整数:");
            int b = new Scanner(System.in).nextInt();
            System.out.println("请输入第三个整数:");
            int c = new Scanner(System.in).nextInt();
    
            //2.对接收到的三个值进行比较
            /**三元运算符 1 ? 2 : 3
             * 如果1号位置的表达式结果为true,结果就取2号位置的值,反之,就取3号位置的值*/
            //2.1定义变量max来保存a和b中的最大值
            int max = a>b ? a : b;
            //2.2比较max与c谁最大,并将最大值交由max来保存
            max = max>c ? max : c;
            /**解决方案二:*/
            //int max = a>b?(a>c?a:c):(b>c?b:c);
            //3.输出结果
            System.out.println("三个数的最大值是:"+max);
        }
    }
    

    练习题:接收用户输入的数据,判断是奇数还是偶数

    package cn.cxy.exec;
    
    import java.util.Scanner;
    public class TestNum {
    	public static void main(String[] args) {
    		//1.提示并接收用户输入的数据
    		System.out.println("请输入您要判断的数据");
    		int input = new Scanner(System.in).nextInt();
    		//2.判断用户输入的数据
    		if(input % 2 == 0) {
    			System.out.println(input+"是偶数");
    		}else {
    			System.out.println(input+"是奇数");
    		}
    	}
    }
    

    练习题:输入数字1~7,输出对应星期几

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class TestDay {
    	public static void main(String[] args) {
    		//1.提示并接收用户输入的数据
    		System.out.println("请输入数据:");
    		int input = new Scanner(System.in).nextInt();
    		//2.判断用户输入的数据
    		if(input == 1) {
    			System.out.println("星期一");
    		}else if(input == 2){
    			System.out.println("星期二");
    		}else if(input == 3){
    			System.out.println("星期三");
    		}else if(input == 4){
    			System.out.println("星期四");
    		}else if(input == 5){
    			System.out.println("星期五");
    		}else if(input == 6){
    			System.out.println("星期六");
    		}else if(input == 7){
    			System.out.println("星期日");
    		}
    	}
    }
    

    练习题: BMI 指数测试 BMI = 体重 (kg) / 身高² (m)

    接收用户输入的身高和体重,将判断结果输出
    过轻:低于18.5
    正常:18.5 ~ 22.9
    偏胖:23 ~ 24.9
    肥胖:25 ~ 29.9
    重度肥胖:高于30
    极度肥胖:高于40

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class TestBMI {
        public static void main(String[] args) {
            //1.提示并接收用户输入的身高与体重信息
            System.out.print("请输入您的身高(单位为m):");
            double height = new Scanner(System.in).nextDouble();
            System.out.print("请输入您的体重(单位为kg):");
            double weight = new Scanner(System.in).nextDouble();
    
            //2.调用getBMI()方法,根据身高和体重信息,输出结果
            getBMI(height, weight);
        }
    
        public static void getBMI(double h, double w) {
            //求出BMI指数
            double bmi = w / (h * h);
            //定义一个变量r来保存最终结果
            String r = "";
    
            //根据 bmi 指数范围,来给r重新赋值
            if (bmi < 18.5) {
                r = "过轻";
            } else if (bmi <= 22.9) {
                r = "正常";
            } else if (bmi <= 24.9) {
                r = "偏胖";
            } else if (bmi <= 29.9) {
                r = "肥胖";
            } else if (bmi <= 40) {
                r = "重度肥胖";
            } else {
                r = "极度肥胖";
            }
            //打印最终结果
            System.out.println("您的BMI指数:" + bmi);
    
            System.out.println("您的体重属于:" + r);
        }
    }
    

    练习题:最优选择2

    小蓝同学想买一个价值8888元的新手机,她的旧手机在二手市场能卖1880元,而手机专卖店推出以旧换新的优惠,把她的旧手机交给店家,新手机就能够打7.5折优惠。为了更省钱,小蓝要不要以旧换新?

    public class TestChoice {
        public static void main(String[] args) {
            //1.计算不使用以旧换新的花费
            int plan1 = 8888 - 1880;
            //2.计算以旧换新的花费
            double plan2 = 8888 * 0.75;
            //3.判断两种方式
            if(plan1 > plan2){
                System.out.println("使用以旧换新更省钱");
            }else{
                System.out.println("不使用以旧换新更省钱");
            }
        }
    }
    

    练习题:求数字的绝对值

    绝对值是指一个数在数轴上所对应点到原点的距离,用“| |”来表示。负数的绝对值是他去掉负号以后的值,而非负数(0和正数)的绝对值是他本身。请定义一个方法,接收用户输入的数字,输出绝对值结果。

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class TestNum {
        public static void main(String[] args) {
            //1.接收用户输入的要测试的数字
            System.out.println("请输入你要判断的数字:");
            double input = new Scanner(System.in).nextDouble();
            //2.调用求绝对值的方法并拿到方法执行后的结果(返回值)
            double result = getAbsNum(input);
            //3.打印求出的结果
            System.out.println(input+"的绝对值是:"+result);
        }
    
        private static double getAbsNum(double input) {
            if(input >=0){//如果是非负数
                return input;//返回本身的值
            }else{//如果是负数
                return -input;//则值取反
            }
        }
    
    }
    

    练习题:求指定两个数的最大公约数和最小公倍数

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class NumTest {
       public static void main(String[] args) {
          System.out.println("输入两个整数:");
          int a = new Scanner(System.in).nextInt();
          int b = new Scanner(System.in).nextInt();
    
          int d = zdgys(a,b);//调用求最大公约数的方法
          long x = zxgbs(a,b);//调用求最小公倍数的方法
          System.out.println("最大公约数:"+d);
          System.out.println("最小公倍数:"+x);
       }
    
       private static int zdgys(int a, int b) {
          int min = a<b ? a : b;
          for(int i=min; i>=1; i--) {
             //i能把a和b同时整除
             if(a%i==0 && b%i==0) {
                return i;
             }
          }
          //这句代码根本不会执行,
          //让编译可以通过
          return 0;
       }
    
       private static long zxgbs(int a, int b) {
          int max = a>b? a : b;
          for(long i=max; ;i+=max) {
             //i能同时被a和b整除
             if(i%a==0 && i%b==0) {
                return i;
             }
          }
       }
    
    }
    

    练习题:银行收入计算

    某银行推出了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单支取本息。存款年利率表如下:
    ​ 存期 年利率(%)
    ​ 一年 2.25
    ​ 两年 2.7
    ​ 三年 3.25
    ​ 五年 3.6
    请存入一定金额(1000起存),存一定年限(四选一),计算到期后得到的本息总额。
    提示:
    ​ 存入金额和存入年限均由键盘录入
    ​ 本息计算方式:本金+本金×年利率×年限

    import java.util.Scanner;
    public class BankDemo {
        public static void main(String[] args) {
            //1.提示并接收用户输入的存款金额
            System.out.println("请输入存款金额:");
            int money = new Scanner(System.in).nextInt();
            //2.提示并接收用户输入的存款年限
            System.out.println("请输入存款年限:");
            int year = new Scanner(System.in).nextInt();
            //3.定义变量用来保存本金和利息之和
            double outMoney = 0;
            //4.根据利率和年限计算本息和
            if (year == 1) {
                outMoney = money + money * 2.25 / 100 * 1;
            } else if (year == 2) {
                outMoney = money + money * 2.7 / 100 * 2;
            } else if (year == 3) {
                outMoney = money + money * 3.25 / 100 * 3;
            } else if (year == 5) {
                outMoney = money + money * 3.6 / 100 * 5;
            } else {
                System.out.println("输入的年限有误");
            }
            //5.打印输出
            System.out.println("存款" + year + "年后的本息是:" + outMoney);
        }
    }
    

    练习题:求税后工资问题

    2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:
    ​ 0 ~ 3000元的部分,交税3%
    ​ 3000 ~ 12000元的部分,交税10%
    ​ 12000 ~ 25000的部分 , 交税20%
    ​ 25000 ~ 35000的部分,交税25%
    ​ 35000 ~ 55000的部分,交税30%
    ​ 55000 ~ 80000的部分,交税35%
    ​ 超过80000的部分,交税45%
    比如:小蓝入职一家企业后,税前工资是18000,则他每月该交个税的部分是18000-1800-5000=11200元,个税缴纳数额是3000×3%+8200×10%=910元。税后工资15290元。
    请完成一个个税计算程序,在用户输入税前工资后,计算出他对应的纳税数额,以及税后工资为多少?

    import java.util.Scanner;
    public class Demo5 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您的税前工资:");
            //2.键盘录入税前工资
            int money = sc.nextInt();
            //3.计算应纳税部分的工资
            double before = money - (money*0.1) - 5000;
            //4.定义个税变量
            double shui = 0;
            //5.按照梯度范围计算个税数值
            if(before > 0 && before <=3000){
                shui = before * 0.03;
            }else if(before > 3000 && before <=12000){
                shui = 3000*0.03 + (before-3000) * 0.1;
            }else if(before > 12000 && before <=25000){
                shui = 3000*0.03 + 9000*0.1 +  (before-12000)*0.2;
            }else if(before > 25000 && before <=35000){
                shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + (before-25000)*0.25;
            }else if(before > 35000 && before <=55000){
                shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + (before-35000)*0.3;
            }else if(before > 55000 && before <=80000){
                shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + (before-55000)*0.35;
            }else if(before > 80000){
                shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + 25000*0.35 + (before-80000)*0.45;
            }
            //6.计算税后工资
            double after = money - (money*0.1) - shui;
            //7.打印个税和税后工资
            System.out.println("个人所得税" + shui + "元");
            System.out.println("税后工资" + after + "元");
        }
    }
    

    练习题: 手机选号:根据用户输入的手机号来确认用户实际支付的价格

    如果尾数为8,需支付办卡费50元
    如果尾数为4,需支付办卡费用0元
    如果是其他尾号,需支付办卡费用20元

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class PayCard {
        public static void main(String[] args) {
            //1.提示并接收用户输入的手机号
            System.out.println("请输入您预选的手机号:");
            String tel = new Scanner(System.in).nextLine();//注意String类型数据一般用nextLine()
    
            //2.调用getPrice()方法,来计算价格,注意需要把手机号tel作为参数传入方法中
            getPrice(tel);
        }
    
        //3.创建getPrice()
        public static void getPrice(String tel) {
            //3.1 手机号tel的长度,必须是11位的正确手机号--提前校验,提高程序健壮性
            if(tel.length() != 11) {
                System.out.println("号码格式错误");
                return;//结束方法,返回到调用位置再继续执行
            }
    
            /*比如我们拿到的手机号是tel="2313123123",想要拿到尾数,也就是最后一个字符
             * 需要用到 char c = tel.charAt(10)
             * 注意:由于下标也是从0开始,所以取第11个字符,它的下标位置是10
             */
            //3.2获取手机号的尾数
            char c = tel.charAt(10);
    
            //3.2定义用来保存最终结果的变量price,初始值为0
            int price = 0;
    
            //3.3根据c字符的值,来为price重新赋值
            switch(c) {
                case '8': price=50; break;//尾数为8支付50
                case '4': price=0; break;//尾数为4免费
                default: price=20;//其他情况需支付20
            }
            //3.4显示结果
            System.out.println("您实际应支付的价格为:"+price);
        }
    }
    

    练习题: 获取邮箱名字

    接收用户输入的邮箱名,获取邮箱的名字
    比如:cxy@163.com,输出cxy

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class GetEmailName {
    	public static void main(String[] args) {
    		System.out.println("输入email:");
    		String e = new Scanner(System.in).nextLine();
    		//email地址e,传递到该方法,
    		//并得到方法返回的名字,保存到变量n
    		String n = getName(e);
    		System.out.println(n);
    	}
    
    	static String getName(String email) {
    		/*
    		 * "sdfwerw@rewerwe.com"
    		 *         |
    		 *         index
    		 *
    		 * 1. 定位 "@" 的下标位置 index
    		 * 2. 截取 [0, index),直接返回
    		 * email.indexOf("@")
    		 *        查找指定子串的位置
    		 *        找不到,得到特殊值 -1
    		 * email.substring(0, index)
    		 *        截取 [0, index)
    		 */
    		//找@的位置
    		int index = email.indexOf("@");
    		if(index == -1) {//找不到
    			return "邮箱格式错误";
    		}
    		//截取,直接返回截取的结果
    		return email.substring(0, index);
    	}
    }
    

    练习题 : 分别通过for循环/While循环/do-While循环写一个死循环

    package cn.cxy.exec;
    
    public class DeadCycle {
        public static void main(String[] args) {
            //for循环的死循环
    //        for (int i = 1; ; i++){
    //            System.out.println("欢迎学习泡泡的分享,继续加油哦~");
    //        }
            //while循环的死循环
    //        while(true){
    //            System.out.println("都到这里啦?奥利给~");
    //        }
            //do-while循环的死循环
            do{
                System.out.println("相信我们可以的~");
            }while(true);
        }
    }
    

    练习题: 鸡兔同笼问题(穷举法)

    已知:鸡兔共35,94只脚,那么鸡和兔各几只?
    package cn.cxy.exec;
    //穷举法
    //鸡    兔
    //0     35
    //1     34
    //2     33
    //3     32
    //...
    //23    12
    //...
    //35    0
    public class SameCage {
        public static void main(String[] args) {
            //循环变量j,控制小鸡的个数: 0到35递增
            //循环变量t,控制兔子的个数: 35到0递减
            for(int j=0,t=35; j<=35; j++,t--) {//如果有多个小条件,用逗号隔开
                //保证脚的数量是94
                if(j*2 + t*4 == 94) {
                    System.out.println("鸡:"+j+", 兔:"+t);
                }
            }
        }
    }
    

    练习题:商品录入系统

    通过java基础的相关知识,设计并完成一个简单的商品录入系统,可以实现:菜单显示、商品信息展示、商品信息录入、商品信息查询、退出的功能

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class Product {
       //成员变量
       static String[] names = {"iPhoneXS","华为 Mate 20 pro","小米X","vivo NEX","oppo Find"};
       static double[] price = {8999,5399,2399,4399,3999};
       static int[] numbers =  {50,20,80,120,90};
    
       public static void main(String[] args) {
          /*
           * ----------------------
           * 1. 商品列表
           * 2. 商品录入
           * 3. 商品查询
           * 4. 统计信息
           * 5. 退出
           * ----------------------
           * 选择:> 1
           * ....
           */
    
          //死循环显示菜单
          outer:
          while(true) {
             //显示菜单,并获得选择的值
             int c = menu();
             //判断c的值
             switch(c) {
             case 1: f1(); break;
             case 2: f2(); break;
             case 3: f3(); break;
             case 4: f4(); break;
             case 5: break outer;
             }
          }
       }
    
       private static int menu() {
          System.out.println("----------------------");
          System.out.println("1. 商品列表");
          System.out.println("2. 商品录入");
          System.out.println("3. 商品查询");
          System.out.println("4. 统计信息");
          System.out.println("5. 退出");
          System.out.println("----------------------");
          System.out.print("选择:> ");
          return new Scanner(System.in).nextInt();
       }
    
       private static void f1() {
          /*
             names
             ["A", "B", "C"]
             price
             [2,    8,    3]
             numbers
             [200,  300,  180]
               0     1    2
             1. 名称:xx,价格:xx,数量:xx
           */
          for(int i=0;i<names.length;i++) {
             String n = names[i];
             double p = price[i];
             int b = numbers[i];
             System.out.println(
              (i+1)+". 名称:"+n+",价格:"+p+",数量:"+b);
          }
       }
    
       private static void f2() {
          /*
             names
             ["A", "B", "C"]
             price
             [2,    8,    3]
             numbers
             [200,  300,  180]
              0     1    2
          */
          //遍历数组
          for (int i = 0; i < names.length; i++) {
             System.out.println("录入第"+(i+1)+"件商品:");
             System.out.print("名称:");
             String n = new Scanner(System.in).nextLine();
             System.out.print("价格:");
             double p = new Scanner(System.in).nextDouble();
             System.out.print("数量:");
             int b = new Scanner(System.in).nextInt();
             names[i] = n;
             price[i] = p;
             numbers[i] = b;
          }
          //重新显示商品列表
          f1();
       }
    
       private static void f3() {
          /*
             names
             ["A", "B", "C"]
             price
             [2,    8,    3]
             numbers
             [200,  300,  180]
              0     1    2
            字符串,比价是否相等,要用equals()方法
            a = "aaa"
            b = "aaa"
            a.equals(b)
           */
          System.out.print("输入查询的商品名:");
          String n = new Scanner(System.in).nextLine();
          //遍历数组
          for (int i = 0; i < names.length; i++) {
             // n 和 names[i] 相等
             if(n.equals(names[i])) {
                String name = names[i];
                double p = price[i];
                int b = numbers[i];
                System.out.println(
                 (i+1)+". 名称:"+name+",价格:"+p+",数量:"+b);
                return;
             }
          }
          //循环结束,所有商品都比较完,没有找到
          System.out.println("找不到商品");
       }
    
       private static void f4() {
          /*
             names
             ["A", "B", "C"]
             price
             [2,    8,    3]
             numbers
             [200,  300,  180]
                  0     1     2
           */
          //商品总价,单价均价,最高单价,最高总价
          double spzj = 0;//商品总价
          double djzj = 0;//单价总价
          double zgdj = 0;//最高单价
          double zgzj = 0;//最高总价
          //遍历数组
          for (int i = 0; i < names.length; i++) {
             spzj += price[i] * numbers[i];
             djzj += price[i];
             //数组中,找到更大的值
             if(price[i] > zgdj) {
                zgdj = price[i];//更大值存到这个变量
             }
             if(price[i]*numbers[i] > zgzj) {
                zgzj = price[i]*numbers[i];
             }
          }
          System.out.println("商品总价:"+spzj);
          System.out.println("单价均价:"+(djzj/names.length));
          System.out.println("最高单价:"+zgdj);
          System.out.println("最高总价:"+zgzj);
       }
    }
    

    练习题:求数字阶乘(for循环版)

    需求:接收用户输入的数字,计算该数字的阶乘结果
    已知:负数不可以有阶乘,0的阶乘结果是1,
    5 ! = 5 x 4 x 3 x 2 x 1

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class Factorial {
        public static void main(String[] args) {
            System.out.print("输入整数,求阶乘:");
            int n = new Scanner(System.in).nextInt();
            //调用f()方法,把n的值传递到f()方法,求阶乘
            f(n);
        }
    
        public static void f(int n) {
            if(n<0) {
                System.out.println("负数不可以求阶乘");
                return;//方法结束,返回到调用位置继续执行
            }
            if(n == 0) {
                System.out.println("0的阶乘是1");
                return;
            }
            /*
             * r = 5
             * i
             * 4, r=r*i
             * 3, r=r*i
             * 2, r=r*i
             * 1, r=r*i
             */
            long r = n;
            for(int i=n-1; i>=1; i--) {
                r *= i;
            }
            System.out.println(n+"的阶乘:"+r);
        }
    }
    /**其实我们还可以通过递归思想解决这个问题,感兴趣的可以研究一下~*/
    

    练习题:多次生成随机数,并打印第一次出现大于0.999 时的次数与生成的随机数

    package cn.cxy.exec;
    
    public class ForBreak {
        public static void main(String[] args) {
            // Math.random()可以产生[0,1)的随机浮点数
            // >0.999
            //写一个死循环, i变量用来计次
            for(int i=1; ;i++) {
                double d = Math.random();
                if(d>0.999) {
                    System.out.println("第"+i+"次产生了目标值,值为:"+d);
                    break;
                }
            }
        }
    }
    

    练习题:打印100以内除了尾数为3,5,7的所有数

    package cn.cxy.exec;
    
    public class ForContinue {
        public static void main(String[] args) {
            for(int i=1;i<=100;i++) {
                int y = i%10;//100以内的数,通过取余求出尾数
                if(y==3 || y==5 || y==7) {
                    continue;//如果尾数为3 5 7 ,则跳过后面的打印,进行下一轮循环
                }
                System.out.println(i);
            }
        }
    }
    

    练习题:求质数:接收用户输入的数字,判断是否为质数

    质数的概念:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数
    规定:1既不是质数,也不是合数

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class PrimeNumber {
        public static void main(String[] args) {
            System.out.print("请输入要判断的自然数:");
            int n = new Scanner(System.in).nextInt();
            //调用getPrimeNumber()方法,判断n是否为质数
            getPrimeNumber(n);
        }
        public static void getPrimeNumber(int n) {
            if(n<2) {//此范围内的数均不为质数
                System.out.println(n+"不是质数");
                return;//结束程序
            }
            if(n == 2) {
                System.out.println("2是质数");
                return;
            }
            //在 2到 1+n开方范围(数学理论),找能把n整除的值(这个值也称作因子)
            //如果找到可以把n整除的第三个数,那n就不是质数,反之,n为质数
            double max = 1+ Math.sqrt(n);//max保存的是查找因子的范围
    
            //依次遍历范围内的所有数,验证是否存在n的因子
            for(int i=2; i<max; i++) {
                //判断n能不能被i整除,如果有,说明不是质数
                if(n%i == 0) {
                    System.out.println(n+"不是质数");
                    return;
                }
            }
            //如果判断了范围内的所有值,没有能整除的,则说明n是质数
            System.out.println(n+"是质数");
        }
    }
    

    练习题:接收用户输入的数字,判断在此范围内质数的个数

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class CountPrimeNumber {
        public static void main(String[] args) {
            System.out.println("输入整数n,求n内质数的数量");
            int n = new Scanner(System.in).nextInt();
    
            count(n);
        }
    
        public static void count(int n) {
            if(n<2) {
                System.out.println("没有质数");
                return;
            }
            if(n==2) {
                System.out.println("有1个质数");
                return;
            }
            //定义计数变量
            int count = 1;//已知有一个质数
            outer:   //从3到n寻找质数
            for(int i=3; i<=n ;i++) {
                //判断i是否是质数
                double max = 1+ Math.sqrt(i);
                for(int j=2; j<max; j++) {//在2到<max,找能把i整除的数
                    if(i%j == 0) {//i被j整除,i不是质数
                        //跳到i++,继续判断下一个i值
                        continue outer;//跳到外部outer的位置
                    }
                }
                //内层j循环结束,i是质数
                count++;
            }
            System.out.println(n+"内质数的数量:"+count);
        }
    }
    

    练习题:生成一个顺序数组,将这个数组的元素打乱顺序后输出

    package cn.cxy.exec;
    
    import java.util.Arrays;
    import java.util.Random;
    
    public class ShuffleArray {
        public static void main(String[] args) {
            //调用f()方法,从方法获取一个int[]数组
            int[] a = f();
            //遍历打印数组数据
            for(int i=0; i<a.length; i++) {
                System.out.println(a[i]);
            }
            System.out.println("\n\n----------------");
    
            //把a数组,传递到 shuffle() 方法打乱顺序
            shuffle(a);
            //打印乱序后的数组
            System.out.println(Arrays.toString(a));
        }
    
        public static int[] f() {
            //新建int[]数组,长度5
            //再把它的内存地址存到变量 a
            int[] a = new int[5];
            //遍历访问5个位置,填入1,2,3,4,5
            for(int i=0; i<a.length; i++) {
                a[i] = i+1;
            }
            //返回数组,把数组返回到调用位置
            //本质是把数组地址返回去
            return a;
        }
    
        public static void shuffle(int[] a) {
            /*
             *        j
             * [4, 2, 3, 1, 5]
             *     i
             *
             * *) i循环遍历数组
             * *) 随机定位下标j与i交换
             */
            for (int i = 0; i < a.length; i++) {
                //随机下标j,范围:[0, a.length)
                int j = new Random().nextInt(a.length);
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    

    练习题:打印全三角形

    需求:接收用户输入的行数,打印对应的全三角形,如图所示:
    在这里插入图片描述
    在这里插入图片描述

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class PrintTraingle {
    	public static void main(String[] args) {
    		//1.提示并接收用户输入的行数:
    		System.out.println("请输入您要打印星星的行数:");
    		int n = new Scanner(System.in).nextInt();
    
    		//2.开始打印图形
    		//2.1外层循环控制打印的行数 i的取值范围:[1,n],一共n行
    		for(int i=1;i<=n;i++){
    			//2.2内层循环1
    			//控制每行打印空格的个数 j的取值范围:[0,n-i),即1 2 3...
    			for(int j=0;j<n-i;j++){
    				System.out.print(" ");
    			}
    			//2.3内层循环2
    			//控制每行打印星星的个数 k的取值范围:[1,2*i-1],即1 3 5 ...
    			for(int k=1;k<=2*i-1;k++){
    				System.out.print("*");
    			}
    			//2.4打印完本行所有内容后添加换行
    			System.out.println();
    		}
    	}
    }
    

    练习题:模拟双色球生成案例

    需求:体彩中有一项是双色球,要求在1-33号共33个红色球里选出6个,1-16号共16个蓝色球中选出一个作为中奖号码,请实现这个需求

    package cn.cxy.exec;
    
    import java.util.Arrays;
    import java.util.Random;
    
    public class ColorBall {
    	public static void main(String[] args) {
    		//准备两个号码数组
    		int[] r = zbsz(33);//[1,2,3,4,5....33]
    		int[] b = zbsz(16);//[1,2,3...16]
    		System.out.println(Arrays.toString(r));
    		System.out.println(Arrays.toString(b));
    		//选择红球
    		int[] red = selectRed(r);
    		//选择蓝球
    		int blue = selectBlue(b);
    		System.out.println("红球:"+Arrays.toString(red));
    		System.out.println("蓝球:"+blue);
    	}
    	private static int[] zbsz(int n) {//准备数组的方法
    		//新建n个长度的int[]数组,存到a
    		int[] a = new int[n];
    		//遍历a数组,填入1到n
    		for (int i = 0; i < a.length; i++) {
    			a[i] = i+1;
    		}
    		//返回数组
    		return a;
    	}
    	private static int[] selectRed(int[] r) {//选择红球
    		/*
    		 *                                           j
    		 * r [10, 5, 1, 4, 2, 6, 7, 8, 9, 3, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]
    		 *                       i
    		 *       
    		 *         [i, r.length)
    		 *      i+ [0, r.length-i)
    		 */
    		//i循环从0到<6
    		for (int i = 0; i < 6; i++) {
    			//j随机定位
    			int j =
    					i+ new Random().nextInt(r.length-i);
    			int t = r[i];
    			r[i] = r[j];
    			r[j] = t;
    		}
    		//截取前6个位置,生成一个新数组返回
    		return Arrays.copyOf(r, 6);
    	}
    	private static int selectBlue(int[] b) {//选择蓝球
    		return b[new Random().nextInt(16)];
    	}
    }
    

    练习题:求任意自然数各位数之和

    接收用户输入的任意自然数,累计所有位数数字之和
    需求:接收用户输入的行数,

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class SumNum {
    	public static void main(String[] args) {
    		//1.提示并接收用户要计算的自然数:
    		System.out.println("请输出您要求和的自然数:");
    		int n = new Scanner(System.in).nextInt();
    		//2.定义一个变量用来保存最终求和的结果
    		int sum=0;
    		//3.循环获取每一位上的数
    		while(n!=0){
    			//4.求当前的个位数,并将个位数累加
    			sum = sum + (n%10);
    			//5.去掉刚刚累加过的最后一位数,得到新的整数
    			//比如刚刚的十位就变成了现在的个位
    			n=n/10;
    		}
    		//6.打印最终的结果:
    		System.out.println(sum);
    	}
    
    }
    

    练习题:求任意数组中所有元素的最大值

    package cn.cxy.exec;
    
    public class GetArrayMaxNum {
    		public static void main(String[] args) {
    			//1.定义一个数组
    			int[] arr={90,1562,43,2,44,8,6666};
    			//2.选取数组中的第一个元素开始比较
    			int max=arr[0];
    			//3.依次遍历数组中的每个元素
    			for(int i=1;i<arr.length;i++){//i指的是下标,我们通过下标来操作数组中的元素
    				//4.判断当前元素与目前最大值的大小
    				if(arr[i]>max){
    					//5.如果当前数组元素大于max,就讲此元素的值赋值给max
    					max=arr[i];
    				}
    			}
    			//6.打印最终的结果
    			System.out.println(max);
    		}
    	}
    

    练习题:求1000以内的完数

    完数:如果一个数等于其所有因子之和,我们就称这个数为"完数",比如6的因子为1,2,3 6 = 1 + 2 + 3,那么6就是一个完数

     package cn.cxy.exec;
    /**获取1000以内的完数*/
    public class GetNum {
    	public static void main(String[] args) {
    		//1.循环遍历1000以内的所有数
    		for(int i=1;i<=1000;i++){
    			//2.定义一个变量来保存求和的结果
    			int sum = 0;
    			//3.求i的因子
    			for(int j=1;j<=i/2;j++){
    				//4.判断是否能被整除
    				if(i % j == 0){
    					//5.如果能整除,就是因子,因子需要累加
    					sum+=j;
    				}
    			}
    			//6.如果因子累加之和为本轮判断的数,则当前数是完数,输出
    			if(sum==i){
    				System.out.println(i);
    
    			}
    		}
    	}
    }
    

    练习题: 随机数组的归并问题

    需求:生成两个任意的随机数组,并将这两个数组按照数字大小按顺序归并到一个新数组中

    package cn.cxy.exec;
    
    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    public class  MergingArrays {
    	   public static void main(String[] args) {
    	      int[] a = suiJi();
    	      int[] b = suiJi();
    	      Arrays.sort(a);
    	      Arrays.sort(b);
    	      System.out.println(Arrays.toString(a));
    	      System.out.println(Arrays.toString(b));
    	      int[] c = heBing(a, b);
    	      System.out.println(Arrays.toString(c));
    	   }
    
    	   private static int[] suiJi() {
    	      int n = 5+ new Random().nextInt(6);
    	      int[] a = new int[n];
    	      for (int i = 0; i < a.length; i++) {
    	         a[i] = new Random().nextInt(100);
    	      }
    	      return a;
    	   }
    
    	   private static int[] heBing(int[] a, int[] b) {
    	      /*
    	       * a[1,1,2,3,4]
    	       *              j
    	       * b[1,2,4,5,6,8,9]
    	       *         k
    	       *
    	       * c[                     ]
    	       *               i
    	       */
    	      //新建数组
    	      int[] c = new int[a.length+b.length];
    	      //对新数组遍历
    	      for(int i=0,j=0,k=0;i<c.length;i++) {
    	         if(j>=a.length) {//j越界,b数组数据一个一个放入新数组
    	            //c[i] = b[k];
    	            //k++;
    	            //continue;
    	            System.arraycopy(b,k,c,i,b.length-k);
    	            break;
    	         } else if(k>=b.length) {//k越界,a数组数据一个个放入新数组
    	            //c[i] = a[j];
    	            //j++;
    	            //continue;
    	            System.arraycopy(a,j,c,i,a.length-j);
    	            break;
    	         }
    	         //j和k,较小值放入i位置,并递增
    	         if(a[j]<=b[k]) {
    	            c[i] = a[j];
    	            j++;
    	         } else {
    	            c[i] = b[k];
    	            k++;
    	         }
    	      }    
    	      return c;
    	   }
    }
    

    练习题:遍历二维数组打油诗

    package cn.cxy.exec;
    
    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    public class  TestArray {
    	  public static void main(String[] args) {
    	      char[][] a = {
    	          //i
    	         /*0*/{'道','路','千','万','条'},
    	         /*1*/{'安','全','第','一','条'},
    	         /*2*/{'行','车','不','规','范'},
    	         /*3*/{'亲','人','两','行','泪'}
    	             //0    1    2    3    4    j
    	      };
    	      /* j是外层循环,递增
    	       *    i是内层循环,递减
    	       * 亲行安道
    	       * 人车全路
    	       * 两不第千
    	       */
    	      for(int j=0;j<a[0].length;j++) {
    	         for(int i=a.length-1; i>=0; i--) {
    	            System.out.print(a[i][j]);
    	         }
    	         System.out.println();
    	      }
    	   }
    }
    

    练习题:求猴子大王

    15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?

    package cn.cxy.exec;
    /**猴子选大王*/
    public class MonkeyKing {
    	public static void main(String[] args) {
    		//1.定义长度为15的数组保存猴子,boolean类型是为了判断猴子是否存活
    		boolean[] b=new boolean[15];
    
    		//2.依次遍历每一只猴子
    		//true---未淘汰  false---已淘汰
    		for(int i=0;i<b.length;i++){
    			b[i]=true;//先把所有猴子设置成存活
    		}
    		//3.定义变量保存猴子报的数
    		int num=0;
    		//4.定义变量保存剩余的猴子数
    		int monkeyLeft=15;
    		//5.定义数组下标
    		int index=0;
    		//6.循环,直到只剩最后一只猴子(猴子王)
    		while(monkeyLeft>1){//判断条件
    			//7.检测猴子是否已淘汰
    			if(b[index]){
    				//8.报数
    				num++;
    				//9.判断报数是否为7
    				if(num==7){
    					b[index]=false;//为7淘汰
    					monkeyLeft--;//猴子数减一
    					num=0;//报数归零
    				}
    
    			}
    
    			//10.下标移动
    			index++;
    			//11.围成一圈---最后一个置为0
    			if(index==15){
    				index=0;
    			}
    		}
    
    		//遍历数组,找到最后活着的那个猴子王
    		for(int i=0;i<b.length;i++){
    			if(b[i]){
    				System.out.println(i+1);
    			}
    		}
    	}
    }
    

    练习题:斐波那契问题

    已知:斐波那契数列的前几个数分别为0,1,1,2,3,5…从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项.

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    /**斐波那契数列*/
    public class Faibonacci {
    	public static void main(String[] args) {
    		System.out.println("请输入您要测试的数:");
    		int n = new Scanner(System.in).nextInt();
    		//判断n是否是不正常的范围
    		if(n<1){
    			System.out.println("输入数据有误!!!");
    		}
    		//n==1
    		if(n==1){
    			System.out.println(0);
    		}
    		//n==2
    		if(n==2){
    			System.out.println(0+"\t"+1);	
    		}
    		//n==3
    		if(n==3){
    			System.out.println(0+"\t"+1+"\t"+1);	
    		}
    		//拼接前n项
    		if(n>3){
    			System.out.print(0+"\t"+1+"\t"+1+"\t");	
    		}
    		//循环输出后面的数据
    		int f1=1;
    		int f2=1;
    		int next=0;
    		for(int i=4;i<=n;i++){
    			next=f1+f2;
    			f1=f2;
    			f2=next;
    			System.out.print(next+"\t");
    		}
    	}
    }
    

    练习题:古典问题:生兔兔问题

    有一对兔子,从出生后第3个月起都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子的对数为多少?
    程序分析:前两个月兔子的对数为1
    从第三个月开始,兔子的对数变成了 2 3 5 8 13 21 …

    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class GetRabbitNum {
    	public static void main(String[] args) {
    		System.out.println("请输入要判断的月数:");
    		int month = new Scanner(System.in).nextInt();
    		System.out.println("第"+month+"月兔子的对数为:"+getSum(month));
    	}
    
    	public static int getSum(int month) {
    		//如果是前两个月,还是1对兔子
    		if(month == 1 || month == 2) {
    			return 1;
    		}else {
    			//从第三个开始,兔子按照2 3 5 8 13 21变化
    			return getSum(month-1)+getSum(month-2);
    		}
    	}
    }
    

    练习题:打印水仙花数

    水仙花数:是指一个三位数,其各位数字立方和等于该数字本身
    例如:153就是一个水仙花数,因为153 = 1³ + 5³ + 3³

    package cn.cxy.exec;
    
    public class GetNum {
    	public static void main(String[] args) {
    		//1.遍历所有的三位数
    		for (int i = 100; i < 1000; i++) {
    			//2.调用自定义方法判断是不是水仙花数
    			if(isAim(i)) {
    				//3.如果是水仙花数,就打印
    				System.out.println(i);
    			}
    		}
    	}
    
    	//4.自定义判断水仙花数的方法
    	public static boolean isAim(int a) {
    		int x = a/100;
    		int y = a/10%10;
    		int z = a%10;
    		if(a == x*x*x+y*y*y+z*z*z) {
    			return true;
    		}
    		return false;
    	}
    }
    
    

    练习题:面向对象 封装百分制分数

    需求:封装百分制分数,和它对应的五档分制分数

    分数类:
    package cn.cxy.exec;
    
    public class Score {
    	//成员变量
    	int score;
    	char level;
    	//构造方法
    	public Score(int score) {
    		this.score = score;
    		//计算五档分数,保存到成员变量level
    		this.level = setLevel(score);
    	}
    
    	private char setLevel(int s) {
    		char r = 0;
    		switch(s/10) {
    		case 10:case 9:
    			r = 'A';break;
    		case 8:case 7:
    			r = 'B';break;
    		case 6:
    			r = 'C';break;
    		case 5:case 4:case 3:case 2:
    			r = 'D';break;
    		case 1:case 0:
    			r = 'E';break;
    		}
    		return r;
    
    	}
    
    	public String toString() {
    		return score+", "+level;
    	}
    }
    
    测试类:

    package cn.cxy.exec;

    public class TestScore {
    public static void main(String[] args) {
    /*
    A [90,100]
    B [70,90)
    C [60,70)
    D [20,60)
    E [0,20)
    */
    Score s = new Score(54);
    System.out.println(s.toString());
    }
    }

    练习题:面向对象 打印图形

    需求:设计一个可以随机打印形状的代码

    形状类【父类】:
    package cn.cxy.exec;
    
    public class Shape {
    	public void draw() {
    		//无意义代码
    		//在子类中要重写draw()方法
    		System.out.println("图形形状");
    	}
    	public void clear() {
    		System.out.println("\n\n\n");
    	}
    }
    
    圆形类【子类】:
    package cn.cxy.exec;
    
    public class Circle extends Shape {
    	@Override
    	public void draw() {
    		System.out.println("打印一个圆形 O");
    	}
    }
    
    方形类【子类】:
    package cn.cxy.exec;
    
    public class Square extends Shape {
    	@Override
    	public void draw() {
    		System.out.println("打印一个方形 口");
    	}
    }
    
    直线类【子类】:
    package cn.cxy.exec;
    
    public class Line extends Shape {
    	@Override
    	public void draw() {
    		System.out.println("打印一条直线 ————");
    	}
    
    	public void length() {
    		System.out.println("一米多。。。");
    	}
    }
    
    测试类:随机生成图形
    package cn.cxy.exec;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class TestShape {
    	public static void main(String[] args) {
    		System.out.println("按回车继续");
    		while(true) {
    			int r = new Random().nextInt(4);
    			switch(r) {
    			case 0: f(new Shape()); break;
    			case 1: f(new Line()); break;
    			case 2: f(new Square()); break;
    			case 3: f(new Circle()); break;
    			}
    		}
    	}
    
    	/*
    	 * Shape
    	 *   |- Line
    	 *   |- Square
    	 *   |- Circle
    	 */
    	static void f(Shape s) {
    		System.out.println("----------------");
    		new Scanner(System.in).nextLine();
    		s.draw();
    		//向上转型后,只能调用父类定义的通用成员
    		//子类特有成员不能调用
    		//s.length();
    		//s对象的真实类型是 Line 类型
    		if(s instanceof Line) {
    			//向下转型成Line类型,才能调用它特有的方法
    			Line line = (Line) s;
    			line.length();
    		}
    		new Scanner(System.in).nextLine();
    		s.clear();
    	}
    }
    

    练习题:面向对象 设计士兵类

    需求:设计士兵与武器AK47类,并完成前进、进攻、发射子弹、装载子弹的功能

    士兵类:
    package cn.cxy.exec;
    /*
     * 封装:
     *     士兵相关的属性数据、逻辑运算方法,
     *     封装成一个士兵“类”组件
     */
    import java.util.Random;
    public class Soldier {
    	//成员变量,属性变量
    	int id; //默认值0
    	int blood = 100;
    	AK47 a;//默认 null 值
    
    	//成员方法
    	public void go() {
    		//this是一个特殊引用
    		//引用“当前对象”的地址
    		//当前对象:谁调用就是谁
    		//可以省略,缺省存在
    		System.out.println(this.id+"号士兵前进");
    	}
    
    	public void attack() {
    		if(blood == 0) {
    			System.out.println("这是"+id+"号士兵的尸体");
    			return;//方法结束
    		}
    		System.out.println(id+"号士兵进攻");
    		if(a != null) {
    			a.fire();//调用枪发射子弹
    		}
    		//模拟进攻掉血
    		//随机的减血量
    		int d = new Random().nextInt(10);
    		blood -= d;    
    		if(blood < 0) {//不允许负数血量
    			blood = 0;
    		}
    		System.out.println("血量:"+blood);
    		//血量是0
    		if(blood == 0) {
    			System.out.println(id+"号士兵阵亡");
    		}
    	}
    }
    
    武器类:
    package cn.cxy.exec;
    import java.util.Random;
    /*
     * 封装:
     *     AK47武器相关的属性数据、运算代码,
     *     封装成一个“类”组件
     */
    public class AK47 {
    	int bullets = 100;
    	public void fire() {
    		if(bullets == 0) {
    			System.out.println("没有子弹");
    			return;
    		}
    		//随机产生发射子弹数量
    		int r = new Random().nextInt(10);
    		//要发射的数量,比现有子弹多
    		if(r > bullets) {
    			r = bullets;//有多少发多少
    		}
    		bullets -= r;
    		for(int i=0;i<r;i++) {
    			System.out.print("突");
    		}
    		System.out.println("~");
    		if(bullets == 0) {
    			System.out.println("弹夹空了");
    		}
    	}
    
    	public void load() {
    		bullets = 100;
    		System.out.println("弹夹已装满");
    	}
    }
    
    测试类1:
    package cn.cxy.exec;
    
    public class Test1 {
    	public static void main(String[] args) {
    		//新建 Soldier 士兵对象
    		//内存地址,保存到变量s1
    		Soldier s1 = new Soldier();
    		Soldier s2 = new Soldier();
    		//用s1引用第一个士兵对象
    		//为它的id赋值
    		s1.id = 9527;
    		s2.id = 9528;
    		//用s1找到第一个士兵对象
    		//让第一个士兵执行go()方法代码
    		s1.go();
    		s2.go();
    		//新建 AK47 对象,保存到s1.a
    		s1.a = new AK47();
    		s2.a = new AK47();
    		s2.attack();
    		s2.attack();
    		s2.attack();
    		s2.attack();
    	}
    }
    
    
    测试类2:
    package cn.cxy.exec;
    
    import java.util.Scanner;
    
    public class Test2 {
    	public static void main(String[] args) {
    		//新建AK47对象,地址存到变量a
    		AK47 a = new AK47();
    		System.out.println("按回车射击,输入load装载子弹");
    		while(true) {
    			String s = new Scanner(System.in).nextLine();
    			if(s.equals("load")) {
    				a.load();
    				continue;
    			}
    			a.fire();
    		}
    	}
    }
    

    练习题:面向对象 设计宠物类

    需求:设计宠物类,用户可以自由选择养猫还是养狗,可以给宠物起名字,还可以实现喂食互动的功能,宠物需要有饱食度和快乐度

    宠物类【父类】:
    package cn.cxy.exec;
    public class Pet {
    	String name;
    	int full;
    	int happy;
    	public Pet(String name) {
    		this(name, 50, 50);
    	}
    	public Pet(String name,int full,int happy) { 
    		this.name = name;
    		this.full = full;
    		this.happy = happy;
    	}
    	public void feed() {//宠物的喂食方法
    		if(full == 100) {
    			System.out.println(name+"已经吃饱了");
    			return;
    		}
    		System.out.println("给"+name+"喂食");
    		full += 10;
    		System.out.println("饱食度:"+full);
    	}
    	public void play() {//宠物的互动玩耍方法
    		if(full == 0) {
    			System.out.println(name+"已经饿得玩不动了");
    			return;
    		}
    		System.out.println("陪"+name+"玩耍");
    		happy += 10;
    		full -= 10;
    		System.out.println("快乐度:"+happy);
    		System.out.println("饱食度:"+full);
    	}
    	public void punish() {//宠物的惩罚方法
    		//子类不同的代码,改成调方法
    		System.out.println(
    				"打"+name+"的pp,"+name+"哭叫:"+cry());
    		happy -= 10;
    		System.out.println("快乐度:"+happy);
    	}
    	public String cry() {//小动物被打哭了
    		//无意义代码
    		//cry()方法需要在子类中重写,返回具体哭叫声
    		return "此处有哭叫声";
    	}
    }
    
    小猫类【子类】:
    package cn.cxy.exec;
    public class Cat extends Pet{
    	public Cat(String name, int full, int happy) {
    		super(name, full, happy);
    	}
    	public Cat(String name) {
    		super(name);
    	}
    	@Override
    	public String cry() {
    		return "喵~";
    	}
    }
    
    小狗类【子类】:
    package cn.cxy.exec;
    public class Dog extends Pet {
    	public Dog(String name, int full, int happy) {
    		super(name, full, happy);
    	}
    	public Dog(String name) {
    		super(name);
    	}
    	@Override
    	public String cry() {
    		return "汪~";
    	}
    }
    
    测试类:
    package cn.cxy.exec;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class TestPet {
    	public static void main(String[] args) {
    		System.out.println("1. 狗");
    		System.out.println("2. 猫");
    		System.out.print("选择:> ");
    		int c = new Scanner(System.in).nextInt();
    		System.out.print("给宠物起个名字:");
    		String n = new Scanner(System.in).nextLine();
    		//定义猫狗变量
    		Dog dog = null;
    		Cat cat = null;
    		if(c == 1) {
    			dog = new Dog(n);
    			play(dog);
    		} else {
    			cat = new Cat(n);
    			play(cat);
    		}
    	}
    	private static void play(Dog dog) {
    		System.out.println("按回车执行");
    		while(true) {
    			new Scanner(System.in).nextLine();
    			int r = new Random().nextInt(6);
    			switch(r) {
    			case 0: dog.feed(); break;
    			case 1: dog.play(); break;
    			default: dog.punish(); break;
    			}
    		}
    	}
    	private static void play(Cat cat) {
    		System.out.println("按回车执行");
    		while(true) {
    			new Scanner(System.in).nextLine();
    			int r = new Random().nextInt(6);
    			switch(r) {
    			case 0: cat.feed(); break;
    			case 1: cat.play(); break;
    			default: cat.punish(); break;
    			}
    		}
    	}
    }
    
    更多相关内容
  • Excel函数练习

    2019-04-25 17:52:27
    excel函数练习题,数据处理练300道,另附常用函数以及其格式。
  • SPSS练习数据

    2017-11-02 21:16:25
    这是我从网上找到了SPSS练习数据,里面数据特别多,有表格形式的等 资源分2分,如果CSDN自动调整了,不要怨我
  • Python 练习题100道

    2019-02-28 07:58:47
    Python 练习题100道
  • 经典EXCEL练习

    2018-05-15 21:39:19
    EXCEL练习题,公式练习,经典题目,复杂公式。EXCEL练习题,公式练习,经典题目,复杂公式。
  • 409页C++练习题,涵盖了入门习题,提高习题,同时也包含了大量基础算法及一些链表、队列等算法习题,方便在入门C++的同时,对一些算法进行了解。
  • 电子书 刻意练习

    2017-01-30 14:59:28
    本书是gladwell的10000小时理论的升级。人的大脑神经元具有很大的可塑性,通过科学的训练方法,我们能够在某个领域成为大师。所以不要轻易说‘我不行或者我不会’
  • 优质学习套装(刻意练习练习的心态 、学习之道)共三本经典图书
  • Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用,后面附答案,非常值得一看
  • 练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源
  • 本资源为C++学者入门实用资料,C++编程练习题大全(带答案),转自网络,知识共享,版权归原创所有
  • 蓝桥杯练习题库,从官网获取,包含vip试题。蓝桥杯练习题库,从官网获取,包含vip试题
  • Python经典练习

    2016-03-26 15:38:23
    经典例题,熟练Python。
  • html+css+js新手练习项目,里面包含例子源码,还有单独文件夹分类。适合新手练习
  • 概率论与数理统计同步练习册(附答案详解).doc概率论与数理统计同步练习册(附答案详解).doc概率论与数理统计同步练习册(附答案详解).doc
  • java练习助手

    2016-11-08 17:30:34
    奶爸原创Java练习助手,总结了810道练习题,涵盖了JavaSE方面的所有基础知识:每天坚持练100题,一个月就可以熟练掌握JavaSE方面的知识点,都是最基本,必须会的题,都是问答题,没有选择题,编程就必须不断的敲代码...
  • 简单的JavaWeb项目,适合入门练习,用的jdbc连接oracle
  • 蓝桥杯练习系统VIP试题,源码及测试数据(官方)
  • 代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习代码练习...
  • sql练习语句

    2017-04-02 17:10:46
    数据库查询语句
  • 从零开始学WEB前端——HTML实战练习

    千次阅读 多人点赞 2022-02-09 23:10:19
    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\图片链接\index.html 表格标签练习 文件路径:\my-web\03网页的骨架——HTML实战练习\代码\表格练习\table.html 文件路径:\my-web\03网页的骨架...

    📓项目介绍

    先做个自我介绍,本人是一个没人写前端所以就自学前端的后端程序员🙇。在此项目中我会和大家一起从零基础开始学习前端,从后端程序员的视角来看前端,受限于作者的水平本项目暂时只会更新到前端框架VUE,不会涉及node.js。该项目适合零基础的小白或者和我一样开发网站没人写前端所以自学前端的后端程序员😂。

    该项目的学习顺序是按照我自己学习时总结出来的,其中的每个知识点都是我认真去理解的,同时也查了很多的资料,所有的参考资料我都放在了文章末尾。尊重开源,尊重知识产权。每一个案例我都亲手写过并觉得不错才放上去的。每次的代码和笔记我都放在了开源仓库里,有需要的同学请不要吝啬给我一个star。如果觉得本文写的不错的话记得点赞+关注,你们的支持是我坚持下去的动力😃。

    纸上得来终觉浅,绝知此事要躬行。 ——陆游《冬夜读书示子聿》

    语雀地址:https://www.yuque.com/beilayanmen

    Github地址:https://github.com/SuZui-cn/my-web

    Gitee地址:https://gitee.com/north_gate/my-web

    个人博客地址:https://foollyone.cn/

    ⌨本文知识点

    • VSCode基本介绍

      • 前端工具介绍
      • VSCode的使用
    • HTML常用标签

      • 基本文档标签
      • 基本标签
      • 文本格式化
      • 链接
      • 图片
      • 无序列表
      • 有序列表
      • 定义列表
      • 表格
      • 框架
      • 表单
    • HTML标签练习

      • 标签练习
      • 基本标签实战
      • 列表标签练习
      • 图片标签练习
      • 表格标签练习
      • 表单标签练习
    • 善于实用搜索引擎

    在上一篇文章中,我们主要是针对于HTML的基础理论进行了探讨。但是学习一门技术不能总停留在理论,本文将会和大家一起来对HTML进行练习。

    实践是检验真理的唯一标准。

    VSCode基本介绍

    前端工具介绍

    作为一个合格的程序员,熟练的掌握开发工具是必不可少的。这里给大家稍微的讲解一下前端常用的开发工具。

    • VSCode:插件众多,拓展性强;适用于绝大部分前端开发
    • Sublime Text:界面简洁,轻量级启动快速。
    • HBuilder:国产前端开发工具,非常不错的软件,在开发微信小程序和手机APP上非常好用。
    • WebStorm:jetbrains公司旗下的JavaScript开发工具,适合在前端工程化的项目中使用。
    • Dreamweaver:曾经以PS+DW+FW称霸网页领域,号称网页三剑客。
    • 记事本:大佬都是用记事本写代码的。【手动狗头】

    在以前编写网页大多数是使用的dreamweaver(DW),DW对于新手而言很友好,可以用可视化的编辑方式编写网页,但是DW自己生成的样式代码略微复杂,后期的维护难度很大。随着时代的进步,开发工具也在逐步的更新换代,DW逐渐退出前端开发的视野中。这里推荐大家使用VSCode这款神器。(想要编写微信小程序的同学可以试着使用HBuilder)。

    VSCode的使用

    自动保存

    在编写完代码之后需要保存再打开浏览器才能看到界面的效果,作者在初学网页的时候经常忘记保存代码,导致页面一直不出现效果。所以推荐大家开启vscode里的自动保存。

    左上角:文件->勾选自动保存。

    image-20220209210119608

    创建文件/文件夹

    在VSCode中除了在之前介绍的可以直接将文件/文件夹直接拖进vscode以外,还可以快捷的创建文件/文件夹。只需要选中要创建文件/文件夹的父级目录再点击按钮就可以快捷创建。

    具体操作如下图:

    image-20220209210629269

    插件推荐

    这里推荐几款目前阶段适合大家的插件。插件这部分我不会一次推荐很多,只会分阶段的推荐,并且讲解每个插件的具体作用。以防大家装了一堆插件,结果连具体插件是做什么的都不知道。(也欢迎大家多多关注作者的干货推荐专栏,里面会推荐很多实用的插件)

    Auto Close Tag

    自动闭合标签。装上这款插件我们在写标签的时候只需要输入/就可以快速生成闭合标签。

    image-20220209211211068

    Auto Rename Tag

    自动重命名标签。这个插件可以让我们在修改标签时自动帮我们修改另一个。比如 在修改<div>标签为<span>标签的时候,它会自动帮我们把</div>标签替换为</span>标签。

    image-20220209211340002

    open in browser

    快速在浏览器打开,装上这个插件可以让我们在vscode界面中快速打开浏览器

    pass:该插件作者在初学的时候出现过快捷键不能正常打开浏览器的情况,解决办法是降低该插件的版本即可。

    image-20220209212227345

    使用方式:

    • 右键选择
    • 快捷键:Alt + b

    image-20220209211720980

    image-20220209211958895

    Live Server

    实时预览,这款插件可以在本地运行一个微型服务器,让我们可以实时预览编辑的效果。(在修改召唤神龙那篇文章中就是用该插件和谷歌的另一个路径映射的插件联动,从而达到修改游戏的效果。有兴趣的同学可以去看看我写的修改召唤神龙的文章)

    image-20220209212319330

    使用方式:

    安装好该插件之后在vscode右下角会出现一个’Go Live’,点击即可。

    image-20220209212631953

    Path Intellisense

    路径联想,在我们引入图片或者其他文件的时候这款软件会为我们提示路径。

    image-20220209212732609

    HTML常用标签介绍

    在网页中,每个html标签被称为元素,每个元素都有对应的属性(关于属性,会在下一篇CSS介绍的文章中详细讲解)

    HTML标签的本质是为文本添加语义!

    在学习编程的时候会涉及大量的概念,以及一些常用的代码片段。所以建议大家养成记笔记的习惯。

    拓展内容

    建议大家自主学习gitpage搭建个人博客(后期可能会出教程,等不了的同学可以自行百度,关键词:gitpage搭建个人博客)

    同时建议大家学习markdown语法,并选择一款顺手的markdown编辑器。作者使用的是typroa 0.9版本(因为该软件1.0之后的版本收费)

    typroa历史版本下载:https://typora.io/releases/all

    既然安装了typroa可以自主学习一下图床的概念,再将Typroa和PicGo联动起来

    世上无难事,只要肯登攀。 —— 毛泽东《水调歌头·重上井冈山》

    pass:以下标签取自菜鸟教程

    基本文档标签

    <!DOCTYPE html>
    <html>
    	<head>
    		<title>文档标题</title>
    	</head>
    	<body>
    	可见文本...
    	</body>
    </html>
    

    网页基础的结构,主要需要注意层级结构,以及外部文件是在<head>标签中引入(js文件可以在body中引入)

    基本标签

    <h1>一级标题</h1>
    <h2>二级标题 </h2>
    <h3>三级标题</h3>
    <h4> . . . </h4>
    <h5> . . . </h5>
    <h6>六级标题</h6>
    <span>文本</span>
    <div>‘盒子’</div>
    <p>这是一个段落。</p>
    <br> (换行)
    <hr> (水平线)
    <!-- 这是注释 -->
    

    大家在这里可以试试<span>标签和<div>标签有什么区别

    提示:行级元素,块级元素(后续DIV+CSS布局章节会详细讲解)

    文本格式化

    <b>粗体文本</b>
    <code>计算机代码</code>
    <em>强调文本</em>
    <i>斜体文本</i>
    <kbd>键盘输入</kbd> 
    <pre>预格式化文本</pre>
    <small>更小的文本</small>
    <strong>重要的文本</strong>
     
    <abbr> (缩写)
    <address> (联系信息)
    <bdo> (文字方向)
    <blockquote> (从另一个源引用的部分)
    <cite> (工作的名称)
    <del> (删除的文本)
    <ins> (插入的文本)
    <sub> (下标文本)
    <sup> (上标文本)
    

    链接

    普通的链接:<a href="http://www.example.com/">链接文本</a>
    图像链接: <a href="http://www.example.com/"><img src="URL" alt="替换文本"></a>
    邮件链接: <a href="mailto:webmaster@example.com">发送e-mail</a>
    书签:
    <a id="tips">提示部分</a>
    <a href="#tips">跳到提示部分</a>
    

    注意a标签设置跳转的属性是href可不是src。

    图片

    <img loading="lazy" src="URL" alt="替换文本" height="42" width="42">
    

    图片这里的话需要注意一点就是文件的引用路径,相对路径和绝对路径是不同的

    相对路径和绝对路径的区别:https://blog.csdn.net/qq_34107571/article/details/82834825

    ./是当前文件夹

    …/是上一级文件夹

    …/…/是上上一级文件夹

    在目前的阶段,图片显示不出绝大部分是因为路径的问题,相对路径需要结合之前推荐的Path Intellisense 路径联想插件多多练习。

    pass:使用绝对路径的时候将代码发送给别人,图片会因为路径位置没有对应图片而显示不出来,所以需要注意。其他外部文件(列如CSS、JS文件)在使用绝对路径的时候也会出现这种问题。这点需要注意。

    无序列表

    <ul>
        <li>项目</li>
        <li>项目</li>
    </ul>
    

    有序列表

    <ol>
        <li>第一项</li>
        <li>第二项</li>
    </ol>
    

    定义列表

    <dl>
      <dt>项目 1</dt>
        <dd>描述项目 1</dd>
      <dt>项目 2</dt>
        <dd>描述项目 2</dd>
    </dl>
    

    表格

    <table border="1">
      <tr>
        <th>表格标题</th>
        <th>表格标题</th>
      </tr>
      <tr>
        <td>表格数据</td>
        <td>表格数据</td>
      </tr>
    </table>
    

    框架

    <iframe src="demo_iframe.htm"></iframe>
    

    表单

    <!-- action是数据接受的地点,method是请求方式(关于这部分会在JavaScript的AJAX部分重点讲解) -->
    <form action="demo_form.php" method="post/get">
      <input type="text" name="email" size="40" maxlength="50" />
      <input type="password" />
      <input type="checkbox" checked="checked" />
      <input type="radio" checked="checked" />
      <input type="submit" value="Send" />
      <input type="reset" />
      <input type="hidden" />
      <select>
        <option>苹果</option>
        <option selected="selected">香蕉</option>
        <option>樱桃</option>
      </select>
      <textarea name="comment" rows="60" cols="20"></textarea>
    </form>
    

    表单需要重点掌握,后期前后端交互的时候经常用到。

    HTML标签练习

    还是那句话。

    实践是检验真理的唯一标准。

    建议大家建一个index.html文件,然后把上面所说的标签都敲一下,有人可能要说,那么多东西怎么记得住。

    我亦无他,惟手熟尔。 ——欧阳修《卖油翁》

    不断的练习是学习代码的必经之路。下面给大家推荐两篇文章,以及作者当时学习时候写的代码(代码都放在了文章开头的github和gitee仓库,有需要的自取能点个star那就更好了)

    html速写语法规则:https://blog.csdn.net/qq_33744228/article/details/80910377

    vscode快捷键:https://www.php.cn/tool/vscode/473194.html

    标签练习

    这两个练习就是当时每个标签都使用了一下,看了一下每个标签会是什么效果。

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\i标签练习.html

    image-20220209223307954

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\i标签实例.html

    image-20220209223330926

    基本标签实战

    大家可以试着做一下下面的结构,图片可以截图自取。

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\index.html

    image-20220209223615648

    image-20220209223630879

    标题:帮你推开心灵那扇窗 ——现代服务产业学院开展心理公益讲座为“宅”家师生送良方
    正文:2月29日,由现代服务产业学院心理老师高雪梅通过网络,向全校“宅”家的师生进行了一堂心理健康公益讲座,30余名师生在线与高老师进行了互动,并得到缓解焦虑的“良方”。
    疫情发生以来,全国各地均加强了人员管控,人员只能“宅”在家里,心情难免会出现焦虑。在疫情期间,高雪梅老师的心理热线也曾接到几例相关心理咨询,学院按照要求开始网络课程教学后,在授课过程中和与学生的交流中也感到他们有一些焦虑症状,加上一些老师在组织网络教学过程中,因为年龄和经验等原因产生焦虑情绪。为让师生在疫情防控期间有更好的心态进行工作和学习,高雪梅老师结合师生的实际情况,用自己的专业知识组织了一堂“疫情期间如何缓解焦虑”心理健康公益讲座。
    讲座由一段新型冠状病毒的科普视频引入,师生通过视频了解到本次疫情的发生和传播途径,掌握了如何进行自我防护。接着高老师带领大家认识各种心理状态,通过测试判断自己的心理状态,以“小丸子一家的战‘疫’”问答案例分析指出缓解焦虑的应对措施,让大家掌握心理疏导的具体做法,最后通过一份“应对无聊的计划清单”结束本次讲座。在讲座的过程中,师生互动、受益匪浅。纷纷反映:此次讲座让大家师生学会了疫情期间如何缓解焦虑的方法,同时也认识到心理健康的重要性,更有利于在今后的工作学习中保持积极向上的乐观态度。
    

    列表标签练习

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\列表嵌套\index.html

    image-20220209223817573

    图片标签练习

    下面有五张图片(截图自取)试试相对路径和绝对路径吧。

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\图片链接\index.html

    image-20220209223913856

    表格标签练习

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\表格练习\table.html

    image-20220209224040763

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\HTML练习\表格制作\index.html

    image-20220209224205010

    表单标签练习

    文件路径:\my-web\03网页的骨架——HTML实战练习\代码\表单练习\index.html

    image-20220209224132535

    以上所有案例代码都在仓库里,有需要的同学可以在仓库下载,github访问不了的同学可以访问gitee。

    github:https://github.com/SuZui-cn/my-web

    image-20220209224919543

    gitee:https://gitee.com/north_gate/my-web

    image-20220209225033497

    善于使用搜索引擎

    学习编程时会出现大量的问题,如果不愿意问人的话,强烈建议多用搜索引擎。我的文章中会出现很多前端系列外的知识和工具,这就需要大家善于使用搜索引擎,遇到不会的知识点就去搜索一下。遇到概念性的就百度百度/谷歌百科。

    建议大家学习一下谷歌语法(百度同样实用)

    谷歌语法:https://blog.csdn.net/qq_50589021/article/details/115377111

    比如我只想搜索CSDN的相关内容就可以使用

    关键词 site:blog.csdn.net
    

    如果大家出现问题,可以私信我,我很乐意帮大家解决问题,但是有时候私信太多我会来不及处理,所以可以把问题写在评论区,知道问题所在的同学可以帮忙解决一下。

    展开全文
  • 《信号与系统》计算机练习+利用MATLAB+刘树棠
  • 初学者练习python编程的100个小程序,大部分题目都有答案。
  • JAVA基础编程练习题50题及经典算法90题【含源码及答案】
  • Python从菜鸟到大神的100道经典练习题 Python从菜鸟到大神的100道经典练习
  • 《面向arcgis的python脚本编程》官方数据资料,真实可靠假一赔十,由于网站限制分享资料大小,资料分四个部分供下载,全部下载后才能解压。
  • bootstrap页面练习 里面有4个完整页面的练习 不是单项练习 资源齐全 包含效果图 原始文件 知识点ppt 拿来就可以用 2分绝对超值 本来想免费分享 无奈自己下资源没分啊 快来下载吧
  • 适合程序员的打字练习

    千次下载 热门讨论 2013-03-08 10:59:36
    绝对好玩的游戏,绝对有效的练习,赵老师零分真情奉献!
  • gephi练习数据

    热门讨论 2013-03-21 14:26:14
    Gephi学习时可以用到的一些很好的数据……
  • 经典的打字练习软件TT 提升手速还是需要的 个人觉得比金山打字通赞多了

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,371,676
精华内容 548,670
关键字:

练习