JAVA基础SE 阶段性题目

实体类:public class People {
    private int code;//编号
    private int location;//位置
    public People() {
    }
    public People(int code, int location) {
        this.code = code;
        this.location = location;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
    public int getLocation() {
        return location;
    }
    public void setLocation(int location) {
        this.location = location;
    }
    @Override
    public String toString() {
        return "People{" +
                "code=" + code +
                ", location=" + location +
                '}';
    }
}
业务代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class StuTest {
    //幸存者案例 1-200随机数 100个囚犯
    static List<People> peoples = new ArrayList<>();
    public static void main(String[] args) {
        Random r = new Random();
        for (int i = 1; i <= 100; i++) {
            //需要判断生成的编号是否是唯一的
            int code = r.nextInt(200) + 1;
            if(exist(code)){
                People p = new People(code, i);
                peoples.add(p);
            }else{
                i--;
            }
        }
        //反复删除奇数位置的人
        while (peoples.size()>1){
            List<People> tempPeoples = new ArrayList<>();
            for (int i = 1; i < peoples.size(); i += 2) {
                People p = peoples.get(i);
                tempPeoples.add(p);
            }
            peoples = tempPeoples;
        }
        People luckPeople = peoples.get(0);
        System.out.println(luckPeople);

    }
    public static boolean exist(int code){
        for(People people:peoples){
            if(people.getCode() == code){
                return false;
            }
        }
        return true;
    }
}

实体类自己编辑,以下为业务代码:

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        //字符串数据
        String str = "10001:张三:男:1990-01-01#10002:李四:女:1989-01-09#10003:王五:男:1999-09-09#10004:刘备:男:1899-01-01#10005:孙悟空:男:1900-01-01#10006:张三:女:1999-01-01#10007:刘备:女:1999-01-01#10008:张三:女:2003-07-01#10009:猪八戒:男:1900-01-01";
        List<User> users = new ArrayList<>();
        //把全部用户数据用 # 分隔
        String[] userStrArray = str.split("#");

        for (String userStr : userStrArray) {
            //创建一个用户封装用户数据
            User user = new User();
            String[] userData = userStr.split(":");
            user.setId(Long.valueOf(userData[0]));
            user.setName(userData[1]);
            user.setGender(userData[2]);
            user.setBirthday(LocalDate.parse(userData[3]));
            //将每个对象存在集合里面去
            users.add(user);
        }
        System.out.println(users);
        //实现最后功能
        Map<String, Integer> result = new HashMap<>();
        for (User user : users) {
            String name = user.getName();
            if(result.containsKey(name)){
                result.put(name,result.get(name) + 1);
            }else{
                result.put(name,1);
            }
        }
        //遍历map集合
        result.forEach((k,v)->{
            System.out.println(k+":"+v+"次");
        });
    }
}

业务代码:

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //找出起始位置到目标位置的全部日子
        LocalDate startTime = LocalDate.of(2022, 2, 3);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请您输入要查询的年份和月份,以便为您展示该月休息日(注意必须是2022-02开始)");
        String currentDate = scanner.next()+"-01";
        LocalDate endTime = LocalDate.parse(currentDate);
        LocalDate endDate = endTime;
        //拿到这个月份的最后一天日子 月份+1,日期-1得到
        endTime = endTime.plusMonths(1).minusDays(1);
        System.out.println(endTime);
        //从起始日子到结束日子的全部日子,方便进行信息查询
        List<Day> days = new ArrayList<>();
        while (startTime.isBefore(endTime)){
            Day day = new Day(startTime);
            days.add(day);
            startTime = startTime.plusDays(1);
        }
        System.out.println(days);
        //从头开始遍历,标志休息日
        for (int i = 0; i < days.size(); i+=3) {
            Day day = days.get(i);
            day.setFlag(true);
        }
        //展示当月的休息日情况
        List<Day> currentDayRest = new ArrayList<>();
        for (int i = 0; i < days.size(); i++) {
            Day day = days.get(i);
            if(day.getDate().isBefore(endDate)){
                continue;
            }
            if(day.isFlag()){
                currentDayRest.add(day);
            }
            day.printInfo();
        }
        //那些休息日是周末
        currentDayRest.stream().filter(d->d.getDate().getDayOfWeek().getValue()==6||d.getDate().getDayOfWeek().getValue()==7)
                .forEach(d->{
                    System.out.println(d);
                    if(d.getDate().getDayOfWeek().getValue() == 6){
                        System.out.println("周六");
                    }else{
                        System.out.println("周天");
                    }
                });

    }
}

实体类:

public class Day {
    private LocalDate date;
    private boolean flag;

    public Day() {
    }

    public Day(LocalDate date) {
        this.date = date;
    }

    public Day(LocalDate date, boolean flag) {
        this.date = date;
        this.flag = flag;
    }

    public LocalDate getDate() {
        return date;
    }

    public void setDate(LocalDate date) {
        this.date = date;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    @Override
    public String toString() {
        return "Day{" +
                "date=" + date +
                ", flag=" + flag +
                '}';
    }

    public void printInfo() {
        System.out.println(date+(flag?"休息":""));
    }
}

倒计时功能:

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimerTask;
public class TimeTask extends TimerTask {
    private LocalDateTime startTime;
    public TimeTask() {
        String s = "2024-06-07 09:00:00";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        startTime = LocalDateTime.parse(s,dtf);
    }
    @Override
    public void run() {
        //拿到此刻当前时间
        LocalDateTime now = LocalDateTime.now();
        //计算此时与高考日期的时间差
        Duration duration = Duration.between(now, startTime);
        //获取时间差 toDays()=>toDaysPart() java8不支持本方法
System.out.println(duration.toDays()+"天"+duration.toHours()+"时"+duration.toMinutes()+"分"+duration.getSeconds()+"秒");
    }
}

人口:

import java.util.Timer;
public class Start {
    public static void main(String[] args) {
        //创建一个定时器对象
        Timer timer = new Timer();
        timer.schedule(new TimeTask(),0,1000);//每隔一秒执行一次 new TimerTask()里面的run方法
    }
}

函数接口

@FunctionalInterface
public interface MyConsumer<E> {
    void accept(E e);
}

实现类 MyArrayList:

package com.taozi.demo3;

import java.util.Arrays;
import java.util.Objects;

public class MyArrayList<E> {
    private Object[] elementData = {};
    private int size; //记录元素个数,记录下一个位置
    private int DEFAULT_CAPACITY = 10; //记录默认容量

    public boolean add(E e){
        //判断是否需要扩容
        if(size == elementData.length){
            grow();
        }
        elementData[size++] = e;
        return true;
    }

    public E get(int index){
        //做越界判断
        checkIndex(index);
        return (E) elementData[index];
    }

    public E remove(int index){
        checkIndex(index);
        E e = (E) elementData[index];
        //判断是否需要移位
        int moveFlag = size - index - 1;
        if(moveFlag != 0){
            //数据移位操作
            System.arraycopy(elementData,index + 1,elementData,index,moveFlag);
        }
        elementData[--size] = null;
        return e;
    }

    public int size(){
        return size;
    }
    
    public  void  forEach(MyConsumer<E> action){
        Objects.requireNonNull(action);
        for (int i = 0; i < size; i++) {
            action.accept((E) elementData[i]);
        }
    }

    private void checkIndex(int index){
        if(index < 0 || index >= size){
            throw new IndexOutOfBoundsException(index + "out of max length"+size);
        }
    }


    private void grow() {
        if(size == 0){
            elementData = new Object[DEFAULT_CAPACITY];
        }else{
            // 变成原来的 1.5倍
            elementData = Arrays.copyOf(elementData,elementData.length + elementData.length >> 1);

        }
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < size; i++) {
            E e = (E) elementData[i];
            sb.append(e).append(i == size-1?"":", ");
        }
        sb.append("]");
        return sb.toString();
    }
}

public class Test {
    public static void main(String[] args) {
        //2分查找的运用
        int[] nums = {5,6,7,7,7,8,8,9};
        int target = 7;
        int leftIndex = getLeftIndex(nums,target);
        int rightIndex = getRightIndex(nums,target);
        System.out.println(leftIndex+" " +rightIndex);
    }

    public static int getRightIndex(int[] nums,int target){
        int start = 0;
        int end = nums.length -1;
        int rs = -1;
        while (start <= end){
            int middle = (start+end)/2;
            if(target > nums[middle]){
                start = middle + 1;
            }else if(target < nums[middle]){
                end = middle - 1;
            }else{
                rs = middle;
                start = middle + 1;
            }
        }
        return rs;
    }

    public static int getLeftIndex(int[] nums,int target){
        int start = 0;
        int end = nums.length -1;
        int rs = -1;
        while (start <= end){
            int middle = (start+end)/2;
            if(target > nums[middle]){
                start = middle + 1;
            }else if(target < nums[middle]){
                end = middle - 1;
            }else{
                rs = middle;
                end = middle - 1;
            }
        }
        return rs;
    }
}

 

package com.taozi.demo6;

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

public class  MyLinkedList<E> {
    private int size;
    public static class Node<E>{
        E data;
        Node<E> next;

        public Node(E data, Node<E> next) {
            this.data = data;
            this.next = next;
        }
    }

    public  Node<E> add(){
        Node<E> head = null;
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入你都节点的值");
            String data = sc.next();
            if(data.equals("exit")) break;
            if(head == null){
                head = new Node(data,null);
            }else{
                Node<E> temp = head;
                while (temp.next != null){
                    temp = temp.next;
                }
                temp.next = new Node(data,null);
            }
            size++;
        }
        return head;
    }

    public Node<E> reverse(Node<E> head,int left,int right){
        if(head ==null || left < 1||left>size||right<1||right>size||left==right||left>right){
            return head;
        }
        Node<E> first = head;
        Node<E> mark = null;
        List<E> data = new ArrayList<>();
        int index = 0;
        while (head != null){
            index++;
            if(index == left){
                mark = head;
            }
            if(index >= left && index <= right){
                data.add(head.data);
            }
            if(index == right) break;
            head = head.next;
        }
        //倒序
        for (int i = data.size() - 1; i >= 0 ; i--) {
            E e = data.get(i);
            mark.data = e;
            mark = mark.next;
        }

        return first;
    }
    public  void forEach(Node<E> head){
        if(head == null){
            System.out.println((Object) null);
            return;
        }
        while (head != null){
            System.out.println(head.data + "  ");
            head = head.next;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值