Java—— 五道算法水题

发布于:2025-05-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

第一题

 需求:

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

代码实现:

import java.util.ArrayList;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        //键盘录入一些1~100之间的整数,并添加到集合中。
        //直到集合中所有数据和超过200为止

        //定义集合
        ArrayList<Integer> list = new ArrayList<>();

        //键盘录入
        Scanner sc = new Scanner(System.in);
        while (true) {
            String numStr = sc.nextLine();
            int num = Integer.parseInt(numStr);

            if (num < 1 || num > 100) {
                System.out.println("输入数字范围有误,请重新输入");
                continue;
            }
            list.add(num);

            //调用方法计算集合中所有数据和
            int sum = getSum(list);
            if (sum > 200) {
                break;
            }
        }

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
    }

    //定义方法计算集合中所有数据和
    private static int getSum(ArrayList<Integer> list) {
        int sum = 0;
        for (int i = 0; i < list.size(); i++) {
            int num = list.get(i);
            sum = sum + num;
        }
        return sum;
    }
}

第二题

需求:

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

代码实现: 

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        //自己实现parselnt方法的效果,将字符串形式的数据转成整数。
        //要求:
        //字符串中只能是数字不能有其他字符
        //最少一位,最多10位
        //0不能开头

        Scanner sc = new Scanner(System.in);
        String regex = "[1-9]\\d{0,9}";
        String str;
        while (true) {
            System.out.println("请输入字符串");
            str = sc.nextLine();//1234
            boolean flag = str.matches(regex);
            if (flag) {
                break;
            }
            System.out.println("字符串不符合要求");
        }

        int result = 0;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int num = c - '0';
            result = result * 10 + num;
        }

        System.out.println(result);//1234
        System.out.println(result + 1);//1235
    }
}

第三题

需求:

定义一个方法实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制
除基取余法:
不断的除以基数(几进制,基数就是几)得到余数,
直到商为0,再将余数倒着拼起来即可。

代码实现:

public class Test3 {
    public static void main(String[] args) {
        //定义一个方法自己实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制
        //除基取余法
        //不断的除以基数(几进制,基数就是几)得到余数,
        //直到商为0,再将余数倒着拼起来即可。

        //自定义方法
        System.out.println(toBinaryString(123));//1111011

        //Integer中的方法
        System.out.println(Integer.toBinaryString(123));//1111011

    }

    public static String toBinaryString(int num) {
        //定义StringBuilder便于拼接
        StringBuilder sb = new StringBuilder();

        while (num != 0) {
            //得到余数
            int result = num % 2;
            //将余数倒着拼起来相当于每一个数都拼在前面
            sb.insert(0, result);
            //除以基数
            num = num / 2;
        }
        return sb.toString();
    }
}

第四题

需求:

请使用代码计算你出生到现在经历多少天,用JDK7和JDK8两种方式完成 

代码实现:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class Test4 {
    public static void main(String[] args) throws ParseException {
        //请使用代码计算你出生到现在经历多少天,用JDK7和JDK8两种方式完成

        //JDK7
        //利用字符串定义出生的日期
        String birthStr = "2000-3-5";
        //解析为日期对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = sdf.parse(birthStr);
        //或得毫秒值
        long birthTime = birth.getTime();

        //获得现在时间
        Date now = new Date();
        long nowTime = now.getTime();

        //相减
        long time = nowTime - birthTime;
        System.out.println(time / 1000 / 60 / 60 / 24);//9183


        //JDK8
        //利用工具类ChronoUnit
        //获得现在时间
        LocalDate ld1 = LocalDate.now();
        //获得出生的时间
        LocalDate ld2 = LocalDate.of(2000, 3, 5);

        long result = ChronoUnit.DAYS.between(ld2, ld1);
        System.out.println(result);//9183
    }
}

第五题

需求:

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

代码实现:

import java.time.LocalDate;
import java.util.Calendar;

public class Test5 {
    public static void main(String[] args) {
        //判断任意的一个年份是闰年还是平年
        //要求:用JDK7和JDK8两种方式判断
        //提示:
        //二月有29天是闰年

        //思路:
        //让3月1日减一天,看是否是29号

        //JDK7
        Calendar c = Calendar.getInstance();
        //设置时间为某年3月1日
        /*c.set(Calendar.YEAR,2000);
        c.set(Calendar.MONTH,2);//Calendar月份的范围为0-11
        c.set(Calendar.DAY_OF_MONTH,1);*/
        c.set(2000, 2, 1);
        //将其减1天
        c.add(Calendar.DAY_OF_MONTH, -1);
        //判断是否是29号
        int day = c.get(Calendar.DAY_OF_MONTH);
        if (day == 29) {
            System.out.println(c.get(Calendar.YEAR) + "是闰年");//2000是闰年
        }


        //JDK8
        //设置时间为某年3月1日
        LocalDate ld1 = LocalDate.of(2000, 3, 1);//LocalDate月份的范围为1-12
        //将其减1天
        LocalDate ld2 = ld1.minusDays(1);
        //判断是否是29号
        int dayOfMonth = ld2.getDayOfMonth();
        if (dayOfMonth == 29) {
            System.out.println(ld2.getYear() + "是闰年");//2000是闰年
        }

        //JDK8有判断是否是闰年的方法
        //true:是闰年,false:不是闰年
        boolean flag = ld1.isLeapYear();
        if (flag) {
            System.out.println(ld1.getYear() + "是闰年");//2000是闰年
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到