Java(八)(可变参数,Collections,小案例:斗地主游戏小案例:斗地主游戏,Map集合,Stream流)

news2024/11/24 20:45:12

目录

可变参数

Collections

小案例:斗地主游戏

Map集合

 Map的常用方法

map集合的遍历

键找值

键值对

Lambda 表达式

HashMap底层原理

集合的嵌套

Stream流

获取集合或数组的Stream流

Stream流的方法


可变参数

就是一种特殊的形参,定义在方法和构造器的形参列表中,格式是: 数据类型...参数名称

外部可以接受多个该类型的参数,也可以接收这个参数的数组

而他的内部是一个数组

一个形参列表只能由一个可变参数

可变参数要放到形参列表的后面

public class zheng {
    public static void main(String[] args) {
        test(); // 不传数据
        test(10); // 传一个数据给它
        test(10,20,30); // 传输多个数据给他
        test(new int[]{10,20,30,40,50}); // 传输一个数组给可变参数
    }

    public static void test(int...number) {
        // 可变参数在方法内部,本质上是一个数组
        System.out.println(number.length);
        System.out.println(Arrays.toString(number));
        System.out.println("---------------------");

    }
}

Collections

工具类: 类名.方法  有static修饰的

public class zheng {
    public static void main(String[] args) {
        // 1.public static <T> boolean addAll(Collection<? super T> c,T...elements):
        // 为集合批量添加数据
        List<String> names = new ArrayList<>();
        Collections.addAll(names, "张三","王五","李四","张麻子");
        System.out.println(names);

        // 2.public static void shuffle(List<?> list) 打乱List集合中的元素顺序
        Collections.shuffle(names);
        System.out.println(names);

        // 3.public static <T> void sort(List<T> list) 对List集合中的元素进行升序排序
        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(5);
        list.add(2);
        Collections.sort(list);
        System.out.println(list);

        
      }
}

 下面时设置表示方法

// 比较的对象不能排序的时候,那就方法重写
        List<Student>Student = new ArrayList<>();
        Student.add(new Student("李小谦",18,100));
        Student.add(new Student("李玉刚",58,90));
        Student.add(new Student("李德华",48,60));
        Collections.sort(Student);
        System.out.println(Student);

        // 实现接口的匿名内部类
        Collections.sort(Student, new Comparator<bag5.Student>() {
            @Override
            public int compare(bag5.Student o1, bag5.Student o2) {
                return Double.compare(o1.getScore(),o2.getScore());
            }
        });

上面的方法1在Student中的实现类是

上面就是相当于用sort方法的时候,给出了Student具体按照什么指标来排序

小案例:斗地主游戏

main类

package bag5;

import org.w3c.dom.ls.LSOutput;

import java.sql.SQLOutput;
import java.util.*;
import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class zheng {
    public static void main(String[] args) {
        // 1.牌类
        // 2.房间
        // 3.创建一个房间
        Room room = new Room();
        // 3.启动游戏
        room.start();


      }

    }

创建一个Card类,用来创建Card对象

package bag5;

public class Card {
    private String color;
    private String number;
    private int size;

    public Card() {
    }

    public Card(String color, String number, int size) {
        this.color = color;
        this.number = number;
        this.size = size;
    }

    @Override
    public String toString() {
        return color+number;}

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
}

创建一个房间类

package bag5;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Room {
    // 必须有一副牌
    private List<Card> allCards = new ArrayList<>();
    List<Card> lingHuChong = new ArrayList<>();
    List<Card> lixiaoqian = new ArrayList<>();
    List<Card> zhangsanfeng = new ArrayList<>();
    public Room()
    {
        // 1. 做出54张牌,存入集合allCards
        // a. 点数: 个数确定,类型确定
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] colors = {"♥","🖤","♣","♦"};
        int size = 0;
        for(String number: numbers){
            size++;
            for(String color:colors){
                Card c = new Card(number,color,size);
                allCards.add(c);
            }
        }
        // 单独存入小大王
        Card c1 = new Card("","小王",++size);
        Card c2 = new Card("","大王",++size);
        Collections.addAll(allCards,c1,c2);
        System.out.println(allCards);
    }
    public void start()
    {
        // 1. 洗牌: allCards
        Collections.shuffle(allCards);
        System.out.println("洗牌后: "+ allCards);
        // 2. 发牌: 首先定义三个玩家(ArrayList)
        for (int i = 0; i < allCards.size() - 3; i++) {
            Card c = allCards.get(i);
            if (i % 3 == 0)
            {
                lingHuChong.add(c);
            }
            else if(i%3 == 1){
                lixiaoqian.add(c);
            }
            else {
                zhangsanfeng.add(c);
            }
        }
        // 底牌
        List<Card> lastTreeCards = allCards.subList(allCards.size() - 3,allCards.size());
        //对排进行排序
        sortCards(lixiaoqian);
        sortCards(lingHuChong);
        sortCards(zhangsanfeng);
        lixiaoqian.addAll(lastTreeCards);
        System.out.println(lixiaoqian);
        System.out.println(lingHuChong);
        System.out.println(zhangsanfeng);
    }
    private void sortCards (List<Card> cards ){
        Collections.sort(cards, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                return o1.getSize() - o2.getSize();
            }
        });

    }

}

Map集合

称为双列集合,格式: {key1 = value1,key2=value2}一次需要存一对数据作为一个元素

Map集合的每个元素,"key=value"称为一个键值对/键值对对象/一个Entry对象

Map集合所有键是不允许重复的,但值可以重复,键和值一一对应,每一个键都有自己对应的值

public class map11 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("手表",100);
        map.put("手表",10);// 后面重复的数据会覆盖前面的数据
        map.put("手帕",1200);
        map.put("电脑",300);
        map.put("手机",500);
        System.out.println(map);
    }
}

 Map的常用方法

public class map11 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("手表",100);
        map.put("手表",10);// 后面重复的数据会覆盖前面的数据
        map.put("手帕",1200);
        map.put("电脑",300);
        map.put("手机",500);
        System.out.println(map);
        // 获取集合的大小
        System.out.println(map.size());
        // 清空
        map.clear();
        System.out.println();
        // 判断是否为空
        System.out.println(map.isEmpty());
        // 获取键对应的值
        int v1 = map.get("手表");
        System.out.println(v1);
        System.out.println(map.get("手机"));
        System.out.println(mao.get("李小谦"));

        // public V remove (Object key) 根据键删除整个元素(删除键会返回键的值)
        System.out.println(map.remove("手表"));
        System.out.println(map);

        // public boolean containsKey(Object key)  判断是否包含某个值
        System.out.println(map.containsKey("手表"));
        System.out.println(map.containsKey("手机"));
        System.out.println(map.containsKey("Java"));
        System.out.println(map.containsKey("java"));

        // public boolean containValue(Object value): 判断是否包含某个键
        System.out.println(map.containsValue(100));

        // public Set<K> keySet 获取Map集合中全部键
        Set<String> set = map.keySet();
        System.out.println(set);

        // public Collection<V> values() 获取Map集合中的全部值
        Collection<Integer> list = map.values();
        System.out.println(list);

        // 把其他map数据倒入自己集合中
        Map<String,Integer>map1 = new HashMap<>();
        map1.put("java",10);
        map1.put("python",100);
        Map<String,Integer>map2 = new HashMap<>();

        map2.put("java",20);
        map2.put("C++",100);
    }
}

map集合的遍历

键找值

大体思路就是,将键取出来封装成一个Set对象,然后遍历Set中的键去get到Map中的值

public class map11 {
    public static void main(String[] args) {
        Map<String,Double> map = new HashMap<>();
        map.put("蜘蛛精",162.5);
        map.put("蜘蛛精",169.8);
        map.put("紫霞",165.8);
        map.put("至尊宝",169.5);
        map.put("牛魔王",183.6);
        System.out.println(map);
        // 1. 获取Map集合的全部键
        Set<String> keys = map.keySet();
        System.out.println(keys);
        // 2. 遍历全部的键,根据键获取对应的值
        for (String key : keys) {
            Double value = map.get(key);
            System.out.println(value.doubleValue());
            System.out.println(key + "====>" + value);
        }

    }
}

键值对

将"键值对"看成一个整体进行遍历

public class map11 {
    public static void main(String[] args) {
        Map<String,Double> map = new HashMap<>();
        map.put("蜘蛛精",162.5);
        map.put("蜘蛛精",169.8);
        map.put("紫霞",165.8);
        map.put("至尊宝",169.5);
        map.put("牛魔王",183.6);
        System.out.println(map);

        Set<Map.Entry<String,Double>> set= map.entrySet();
        for (Map.Entry<String, Double> stringDoubleEntry : set) {
            String key = stringDoubleEntry.getKey();
            double value = stringDoubleEntry.getValue();
            System.out.println(key+ "----->"+ value);
        }

    }
}

Lambda 表达式

public class map11 {
    public static void main(String[] args) {
        Map<String,Double> map = new HashMap<>();
        map.put("蜘蛛精",162.5);
        map.put("蜘蛛精",169.8);
        map.put("紫霞",165.8);
        map.put("至尊宝",169.5);
        map.put("牛魔王",183.6);
        System.out.println(map);

        map.forEach((k,v)->{
            System.out.println(k+"---->"+v);
        });
        
        map.forEach(new BiConsumer<String, Double>() {
            @Override
            public void accept(String k, Double v) {
                System.out.println(k+"---->"+v);
            }
        });
    }
}

HashMap底层原理

集合的嵌套

集合的元素又是一个集合

public class map11 {
    public static void main(String[] args) {
        Map<String,List<String>> map = new HashMap<>();
        List<String> cities1 = new ArrayList<>();
        Collections.addAll(cities1,"南京市","扬州市","苏州市","无锡市","常州市");
        map.put("江苏省",cities1);

        List<String> cities2 = new ArrayList<>();
        Collections.addAll(cities2,"武汉市","孝感市","宜昌","鄂州市","三峡市");
        map.put("湖北省",cities2);

        System.out.println(map);

        List<String> cities = map.get("湖北省");
        for (String city : cities) {
            System.out.println(city);
        }
        map.forEach((p,c)->{
            System.out.println(p+"*******"+c);
        });
    }
}

Stream流

获取集合或数组的Stream流

public class map11 {
    public static void main(String[] args) {
        // 1. 获取ArrayList的stream流
        List<String> names = new ArrayList<>();
        Collections.addAll(names,"李小谦","李玉刚","张三","罗翔");
        Stream<String> stream = names.stream();
        // 2.获取Set集合中的Stream流
        Set<Integer> set = new HashSet<>();
        Collections.addAll(set , 4,5,6,7,8);
        Stream<Integer> stream1 = set.stream();
        stream1.filter(s->(s%2 == 0)).forEach(s-> System.out.println(s));

        // 3. 获取Map集合的Stream流
        Map<String,Double> map = new HashMap<>();
        map.put("古力娜扎",172.6);
        map.put("迪丽热巴",175.2);
        map.put("欧阳娜娜",173.2);
        // map.stream();
        // 拿到键的Stream流
        Set<String> keys= map.keySet();
        Stream<String> ks = keys.stream();

        // 拿到值的Stream流
        Collection<Double> values = map.values();
        Stream<Double> vs = values.stream();


        // 键值对的Stream流
        Set<Map.Entry<String,Double>> entries = map.entrySet();
        Stream<Map.Entry<String,Double>> kvs = entries.stream();
        kvs.filter(e->e.getKey().contains("巴")).forEach(e-> System.out.println(e.getKey() + "-----" + e.getValue()));

        // 数组中的Stream流
        String[] names2 = {"张翠山","东方不败","堂大山","独孤九剑"};
        Stream<String> s1 = Arrays.stream(names2);
        Stream<String> s2 = Stream.of(names2);
    }
}

Stream流的方法

先设置一个学生类

package bag6;

import java.util.Objects;

public class Student implements Comparable<Student>{

    // 实现这个结构就是调用排序的时候,排序的方法知道了比较规则
    // this  o
    @Override
    public int compareTo(Student o) {
        // 如果认为左边对象大于右边对象返回正整数
        //如果认为左边对象小于右边对象返回负数
        // 如果认为左边等于右边返回0
        // this表示调用的,o表示被比较的
        return this.age - o.age;
    }
    private String name;
    private int age;
    private double Height;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", Height=" + Height +
                '}';
    }
    
    // 去重的时候按照值去重,不看hashCode
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Double.compare(student.Height, Height) == 0 && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, Height);
    }

    public Student() {
    }

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.Height = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getScore() {
        return Height;
    }

    public void setScore(double score) {
        this.Height = score;
    }
}

常用方法

public class map11 {
    public static void main(String[] args) {
        List<Double> scores = new ArrayList<>();
        Collections.addAll(scores,88.5,100.0,60.0,99.0,9.5,99.6);
        // 需求1: 找出成绩大于60分的数据,并升序后,再输出
        List<Double> S = scores.stream().filter(s->s>60).collect(Collectors.toList());

        Student s1 = new Student("蜘蛛精",26,172.5);
        Student s2 = new Student("蜘蛛精",26,172.5);
        Student s3 = new Student("紫霞",23,167.6);
        Student s4 = new Student("白晶晶",25,169.0);
        Student s5 = new Student("牛魔王",35,183.3);
        Collection<Student> ls = new ArrayList<>();
        Collections.addAll(ls,s1,s2,s3,s4,s5);
        // 需求2:找出年龄大于等于23,且年龄小于等于30的学生,并按照年龄降序输出
//        List<Student> st = ls.stream().filter(s ->s.getAge()>=23 && s.getAge()<=30).sorted(new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return o2.getAge()-o1.getAge();
//            }
//        }).collect(Collectors.toList());
//        System.out.println(st);
        // 需求3:取出身高的前三3名学生,并输出
//        ls.stream().sorted(new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return Double.compare(o2.getScore(),o1.getScore());
//            }
//        }).limit(3).forEach(s-> System.out.println(s));
        //需求4: 取出身高倒数的2名学生,并输出
//        ls.stream().sorted((o1, o2) -> Double.compare(o2.getScore(),o1.getScore()))
//                .skip(ls.size()- 2).forEach(s-> System.out.println(s));
        // 需求5 : 找出身高超出169的学生叫什么名字,要求去除重复的名字,再输出
        ls.stream().filter(s->s.getScore()>168).distinct().forEach(s-> System.out.println(s));
    }
}

终结方法

public class map11 {
    public static void main(String[] args) {
        Student s1 = new Student("蜘蛛精",26,172.5);
        Student s2 = new Student("蜘蛛精",26,172.5);
        Student s3 = new Student("紫霞",23,167.6);
        Student s4 = new Student("白晶晶",25,169.0);
        Student s5 = new Student("牛魔王",35,183.3);
        Collection<Student> ls = new ArrayList<>();
        Collections.addAll(ls,s1,s2,s3,s4,s5);
        // 需求1:请计算出身高超过168的学生有几个人
        long st = ls.stream().filter(s->s.getHeight()>168).count();
        System.out.println(st);
        // 需求2: 请找出身高最高的学生对象
        Optional<Student> s = ls.stream()
                .max(( o1, o2) ->Double.compare(o1.getHeight() , o2.getHeight()));
        System.out.println(s);
        // 需求3 : 请找出身高超过170的学生对象,并返回一个新集合中
        List<Student> student1 = ls.stream().filter(m ->m.getHeight()>170).collect(Collectors.toList());
        System.out.println(student1);

        // 需求4 : 找出身高超过170的学生对象,并把学生对象名字和身高存到一个Map集合中
        Map<String,Double> m1 = ls.stream().filter(q->q.getHeight()>170).distinct()
                .collect(Collectors.toMap(w->w.getName(),w->w.getHeight()));
        System.out.println(m1);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频没有字幕怎么办,怎么给视频增加字幕

文章目录 视频没有字幕怎么办&#xff0c;怎么给视频增加字幕前言软件准备制作字幕1. 导入视频2. 将视频拖拽到轨道3. 生成字幕4. 导出字幕 字幕实时翻译1. 播放视频2. 显示字幕设置3. 双语字幕显示 总结 视频没有字幕怎么办&#xff0c;怎么给视频增加字幕 前言 有时候下载的…

传音荣获2023首届全国人工智能应用场景创新挑战赛“智能家居专项赛”三等奖

近日&#xff0c;中国人工智能学会与科技部新一代人工智能发展研究中心联合举办2023首届全国人工智能应用场景创新挑战赛&#xff08;2023 1st China’s Innovation Challenge on Artificial Intelligence Application Scene&#xff0c;以下简称CICAS 2023)&#xff0c;吸引了…

10 个例子带你学会 AI 编程(含提示词)

大家好&#xff0c;我是伍六七。 AI 编程是一个程序员群体普遍关注的领域&#xff0c;但是真的使用 AI 编程实现提效的还是少数。 有的人没有大模型资源&#xff0c;有的人不知道可以在哪些方面使用 AI 进行提效&#xff0c;还有的人不相信使用 AI 可以提效。 今天&#xff…

国产Ai大模型和chtgpt3.5的比较

下面是针对国产大模型&#xff0c;腾讯混元&#xff0c;百度文心一言&#xff0c;阿里通义千问和chatgpt的比较&#xff0c;最基础的对一篇文章的单词书进行统计&#xff0c;只有文心一言和chatgpt回答差不多&#xff0c;阿里和腾讯差太多了

【机器学习】迁移学习

迁移学习&#xff1a;给定一个有标记的源域和一个无标记的目标域。这两个领域的数据分布不同。迁移学习的目的就是要借助源域的知识&#xff0c;来学习目标域的知识(标签)。或是指基于源域数据和目标域数据、源任务和目标任务之间的相似性&#xff0c;利用在源领域中学习到的知…

【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——Eigen库 本章将介绍视觉SLAM的基本问题之一&#xff1a;如何…

【开源】基于JAVA的天然气工程运维系统

项目编号&#xff1a; S 022 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S022&#xff0c;文末获取源码。} 项目编号&#xff1a;S022&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程…

Win11修改用户名(超详细图文)

新买的电脑一般预装Windows11系统&#xff08;家庭与学生版&#xff09;&#xff0c;新电脑初次开机使用微软邮箱账号登录&#xff0c;则系统将用户名自动设置成邮箱前5位字符。我的用户名便是一串数字【231xx】&#xff08;qq邮箱前5位&#xff09;&#xff0c;看着很不舒服&a…

Docker搭建个人网盘NextCloud并接入雨云对象存储的教程

雨云服务器使用Docker搭建私有云盘NextCloud并接入雨云对象存储ROS的教程。 NextCloud简介 NextCloud由原ownCloud联合创始人Frank Karlitschek创建的&#xff0c;继承原ownCloud的核心技术又有不少的创新。在功能上NextCloud和ownCloud差不多&#xff0c;甚至还要丰富一些&a…

C语言:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

分析&#xff1a; 在主函数 main 中&#xff0c;程序首先定义一个字符变量 c&#xff0c;以及四个整型变量 letters、k、s 和 o&#xff0c;并初始化它们的值为 0。然后使用 printf 函数输出提示信息&#xff0c;让用户输入一行字符。 接下来&#xff0c;程序通过 while 循环结…

编程难点:常见问题及解决方案

目录 1 前言2 学习成本高2.1 学习成本高的问题2.2 学习成本高的解决方法 3 程序bug多3.1 程序bug多的问题 4 程序的性能调试4.1 程序的性能问题4.1 程序的性能调试方法 5 跨平台兼容性差5.1 跨平台兼容问题5.1 跨平台兼容问题的解决方法 6 解决技术难题的方法总结7 总结 1 前言…

pikachu靶场:php反序列化漏洞

pikachu靶场:php反序列化漏洞 文章目录 pikachu靶场:php反序列化漏洞代码审计漏洞利用 代码审计 像这种反序列化的代码基本都是代码审计出的 // 定义一个名为S的类&#xff0c;该类有一个属性$test和一个构造函数 class S{ var $test "pikachu"; // $test是一个…

大数据平台/大数据技术与原理-实验报告--实战HDFS

实验名称 实战HDFS 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.23-2023.10.27 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有centos7.5系统的linu…

SIFT尺度不变特征变换

SIFT(Scale-Invariant Feature Transform)是一种用于图像处理和计算机视觉中的特征提取和匹配的算法。它的主要优点是对图像的尺度、旋转和亮度变化具有较强的鲁棒性。 基本原理: Scale-space peak selection: Potential location for finding features.Keypoint Localizat…

NX二次开发UF_CURVE_ask_parameterization 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_parameterization Defined in: uf_curve.h int UF_CURVE_ask_parameterization(tag_t object, double param_range [ 2 ] , int * periodicity ) overview 概述 Retu…

视频做成二维码的简易教程(收藏)

视频做成二维码的简易教程&#xff0c;由于面向免费用户是5G&#xff0c;普通用户是可以够用的&#xff0c;所以可以推荐给大家&#xff0c;值得一试 以下几点&#xff0c;是您需要了解的&#xff1a; 01.稳定流畅 提供高稳定性&#xff0c;超流畅的企业级视频服务 02.节省成…

qt国际化多语言

vs + qt 方法 一 (1)生成.pro文件 如果报错: cannot find any qt projects to export 则执行如下: 然后重新生成 pro文件。 (2)生成ts文件 (方法1)在项目文件(xxx.pro) 文件添加: TRANSLATIONS += en.ts zh_CN.ts 然后打开cmd命令,进入项目目录,执行 l…

Vue路由器(详细教程)

路由&#xff1a; 1.理解&#xff1a;一个路由(route)就是一组映射关系&#xff08;key-value)&#xff0c;多个路由需要路由器&#xff08;router&#xff09;进行管理。 2.前端路由&#xff1a;key是路径&#xff0c;value是组件。 1、先安装vue-router路由 npm i vue-route…

2023年汉字小达人市级比赛才知道消息?请查收最后三天的备考策略

这两天有家长联系六分家长&#xff0c;说语文老师刚刚通知他们孩子晋级了2023年第十届上海小学生汉字小达人比赛的市级活动&#xff08;实际比赛&#xff09;&#xff0c;该如何准备&#xff1f; 六分成长发现这些家长还有好几个呢。经过和家长了解&#xff0c;发现是孩子的语…

基于单片机寻迹巡线避障智能小车系统设计

**单片机设计介绍&#xff0c; 基于单片机寻迹巡线避障智能小车系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的寻迹巡线避障智能小车系统是一种能够自动跟随线路并避开障碍物的智能小车。下面是一个简要的系…