• Java之包装类的算法小题的练习


    算法小题

    练习一:

    需求:

    键盘录入一些1~10日之间的整数,并添加到集合中。直到集合中所有数据和超过200为止。

    代码示例:

    1. public class Test1 {
    2.    public static void main(String[] args) {
    3.        /*
    4.            键盘录入一些1~10日之间的整数,并添加到集合中。直到集合中所有数据和超过200为止。
    5.        */
    6.        //1.创建一个集合用来添加整数
    7.        ArrayList list = new ArrayList<>();
    8.        //2.键盘录入数据添加到集合中
    9.        Scanner sc = new Scanner(System.in);
    10.        while (true) {
    11.            System.out.println("请输入一个整数");
    12.            String numStr = sc.nextLine();
    13.            int num = Integer.parseInt(numStr);//先把异常数据先进行过滤
    14.            if (num < 1 || num > 100){
    15.                System.out.println("当前数字不在1~100的范围当中,请重新输入");
    16.                continue;
    17.           }
    18.            //添加到集合中//细节:
    19.            //num:基本数据类型
    20.            //集合里面的数据是Integer
    21.            //在添加数据的时候触发了自动装箱
    22.            list.add(num);
    23.            //统计集合中所有的数据和
    24.            int sum = getSum(list);
    25.            //对sum进行判断
    26.            if(sum > 200){
    27.            System.out.println("集合中所有的数据和已经满足要求");
    28.            break;
    29.       }
    30.   }
    31. }
    32.    private static int getSum(ArrayList list) {
    33.        int sum = 0;
    34.        for (int i = 0; i < list.size(); i++) {
    35.            //i :索引
    36.            //list.get(i);
    37.            int num = list.get(i);
    38.            sum = sum + num;//+=
    39.       }
    40.        return sum;
    41.   }
    42. }

    练习二:

    需求:

    自己实现parseInt方法的效果,将字符串形式的数据转成整数。要求:字符串中只能是数字不能有其他字符最少一位,最多10位 0不能开头

    代码示例:

    1. public class Test2 {
    2.    public static void main(String[] args) {
    3.        /*
    4.            自己实现parseInt方法的效果,将字符串形式的数据转成整数。要求:
    5.            字符串中只能是数字不能有其他字符最少一位,最多10位日不能开头
    6.        */
    7.        //1.定义一个字符串
    8.        String str = "123";
    9.        //2.校验字符串
    10.        //习惯:会先把异常数据进行过滤,剩下来就是正常的数据。
    11.        if (!str.matches("[1-9]\\d{0,9}")) {
    12.            //错误的数据
    13.            System.out.println("数据格式有误");
    14.       } else {
    15.            //正确的数据
    16.            System.out.println("数据格式正确");
    17.            //3.定义一个变量表示最终的结果
    18.            int number = 0;
    19.            //4.遍历字符串得到里面的每一个字符
    20.            for (int i = 0; i < str.length(); i++) {
    21.                int c = str.charAt(i) - '0';//把每一位数字放到number当中
    22.                number = number * 10 + c;
    23.           }
    24.            System.out.println(number);
    25.            System.out.println(number + 1);
    26.       }
    27.   }
    28. }

    练习三:

    需求:

    1. package com.itheima.a04test;
    2. public class Test3 {
    3.    public static void main(String[] args) {
    4.        /*
    5.            定义一个方法自己实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制
    6.         */
    7.   }
    8.    public static String tobinarystring(int number) {//6
    9.        //核心逻辑:
    10.        //不断的去除以2,得到余数,一直到商为日就结束。
    11.        //还需要把余数倒着拼接起来
    12.        //定义一个StringBuilder用来拼接余数
    13.        StringBuilder sb = new StringBuilder();
    14.        //利用循环不断的除以2获取余数
    15.        while (true) {
    16.            if (number == 0) {
    17.                break;
    18.           }
    19.            //获取余数 %
    20.            int remaindar = number % 2;//倒着拼接
    21.            sb.insert(0, remaindar);
    22.            //除以2 /
    23.            number = number / 2;
    24.       }
    25.        return sb.toString();
    26.   }
    27. }

    定义一个方法自己实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制

    代码示例:

    练习四:

    需求:

    请使用代码实现计算你活了多少天,用JDK7和JDK8两种方式完成

    代码示例:

    1. public class Test4 {
    2.    public static void main(String[] args) throws ParseException {
    3.        //请使用代码实现计算你活了多少天,用JDK7和JDK8两种方式完成
    4.        //JDK7
    5.        //规则:只要对时间进行计算或者判断,都需要先获取当前时间的毫秒值
    6.        //1.计算出生年月日的毫秒值
    7.        String birthday = "2000年1月1日";
    8.        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
    9.        Date date = sdf.parse(birthday);
    10.        long birthdayTime = date.getTime();
    11.        //2.获取当前时间的毫秒值
    12.        long todayTime = System.currentTimeMillis();
    13.        //3.计算间隔多少天
    14.        long time = todayTime - birthdayTime;
    15.        System.out.println(time / 1000 / 60 / 60 / 24);
    16.        //JDK8
    17.        LocalDate ld1 = LocalDate.of(2000, 1, 1);
    18.        LocalDate ld2 = LocalDate.now();
    19.        long days = ChronoUnit.DAYS.between(ld1, ld2);
    20.        System.out.println(days);
    21.   }
    22. }

    练习五:

    需求:

    判断任意的一个年份是闰年还是平年要求:用JDK7和JDK8两种方式判断提示:二月有29天是闰年一年有366天是闰年

    代码示例:

    1. public class Test5 {
    2.    public static void main(String[] args) {
    3.        /*
    4.            判断任意的一个年份是闰年还是平年要求:用JDK7和JDK8两种方式判断提示:
    5.            二月有29天是闰年一年有366天是闰年
    6.        */
    7.        //jdk7
    8.        //我们可以把时间设置为2000年3月1日
    9.        Calendar c = Calendar.getInstance();
    10.        c.set(2000, 2, 1);
    11.        //月份的范围:0~11
    12.        //再把日历往前减一天
    13.        c.add(Calendar.DAY_OF_MONTH, -1);
    14.        //看当前的时间是28号还是29号?
    15.        int day = c.get(Calendar.DAY_OF_MONTH);
    16.        System.out.println(day);
    17.        //jdk8
    18.        //月份的范围:1~12
    19.        //设定时间为2000年的3月1日
    20.        LocalDate ld = LocalDate.of(2001, 3, 1);
    21.        //把时间往前减一天
    22.        LocalDate ld2 = ld.minusDays(1);
    23.        //获取这一天是一个月中的几号
    24.        int day2 = ld2.getDayOfMonth();
    25.        System.out.println(day2);
    26.        //true:闰年
    27.        //false:平年
    28.        System.out.println(ld.isLeapYear());
    29.   }
    30. }

    1.2 动图演示

    1.3 代码示例

    1. public class A01_BubbleDemo {
    2.    public static void main(String[] args) {
    3.        /*
    4.            冒泡排序:
    5.            核心思想:
    6.            1,相邻的元素两两比较,大的放右边,小的放左边。
    7.            2,第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此类推。
    8.            3,如果数组中有n个数据,总共我们只要执行n-1轮的代码就可以。
    9.        */
    10.        //1.定义数组
    11.        int[] arr = {2, 4, 5, 3, 1};
    12.        //2.利用冒泡排序将数组中的数据变成 1 2 3 4 5
    13.        //外循环:表示我要执行多少轮。 如果有n个数据,那么执行n - 1 轮
    14.        for (int i = 0; i < arr.length - 1; i++) {
    15.            //内循环:每一轮中我如何比较数据并找到当前的最大值
    16.            //-1:为了防止索引越界
    17.            //-i:提高效率,每一轮执行的次数应该比上一轮少一次。
    18.            for (int j = 0; j < arr.length - 1 - i; j++) {
    19.                //i 依次表示数组中的每一个索引:0 1 2 3 4
    20.                if(arr[j] > arr[j + 1]){
    21.                    int temp = arr[j];
    22.                    arr[j] = arr[j + 1];
    23.                    arr[j + 1] = temp;
    24.               }
    25.           }
    26.       }
    27.        printArr(arr);
    28.   }
    29.    private static void printArr(int[] arr) {
    30.        //3.遍历数组
    31.        for (int i = 0; i < arr.length; i++) {
    32.            System.out.print(arr[i] + " ");
    33.       }
    34.        System.out.println();
    35.   }
    36. }

  • 相关阅读:
    埃菲尔之月手表口红礼盒情迷法式浪漫
    处理一对多映射关系的两种方式
    Spark优化-开启动态资源分配
    java-php-python-ssm学生选课咨询系统计算机毕业设计
    如何转行产品经理
    SpringBoot 中使用布隆过滤器 Guava、Redission实现
    go语言数组使用
    高薪程序员&面试题精讲系列118之Session共享有哪些方案?
    机器学习(八)经验风险与结构风险
    Springboot 玩一玩代码混淆,防止反编译代码泄露
  • 原文地址:https://blog.csdn.net/qq_69748833/article/details/132744990