当前位置: 首页 > news >正文

【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储

Java 数字炸弹小游戏(控制台版)+ IO 数据存储

  • 数字炸弹小游戏概述
  • 功能实现
    • 实体类
      • User.java 玩家信息实体类
      • GameRecode.java 游戏记录实体类
    • 自定义异常
      • AccountLockedException.java 账号锁定异常
      • PasswordErrorException.java 密码错误异常
      • UnknowAccountException 账号不存在异常
    • 游戏主类
      • Game.java 游戏主类

数字炸弹小游戏概述

在这里插入图片描述

数字炸弹控制台版小游戏是Java 集合、流程控制、IO、异常、常用类等技术的综合练习。核心需求如下:

实现数字炸弹游戏,要求如下:1、创建游戏菜单:1)注册2)登录3)开始游戏4)游戏记录5)游戏排行6)退出游戏2、菜单含义:1)注册:注册游戏玩家,要求玩家名字不能重复2)登录:使用玩家名字和密码进行登陆3)开始游戏:进入游戏,只有登录的玩家才可以开始游戏4)游戏记录:展示当前玩家的游戏记录,序号、炸弹、猜测次数、游戏开始时间、游戏结束时间、积分5)游戏排行:展示所有用户的昵称、游戏次数、总积分(倒序)6)退出游戏:结束游戏3、游戏规则a、生成100以内的随机值作为炸弹b、从控制台输入猜测的数值c、每次输入猜测值之后缩小猜测范围直到猜中为止d、本轮游戏结束之后反馈菜单(继续游戏、返回菜单)e、本轮游戏结束之后根据猜测次数和游戏时间换算积分4、游戏积分a、1-3次内猜中(含3次),时间在20秒以内,积分+10b、4-6次内猜中(含6次),时间在21-60秒,积分+5c、7-10次内猜中(含10次),时间在60秒以上,积分+2d、10次以上猜中不得分5、拓展功能:a、给游戏排行榜新加菜单选项,支持升序、降序的展示菜单。b、新增玩家管理功能,锁定玩家和解锁玩家。c、给登录功能增加异常处理,自定义:账号不存在异常、认证失败异常、锁定异常d、基于 IO 存储玩家信息和记录信息到文件。

功能实现

实体类

User.java 玩家信息实体类

package com.riu.collect.game2.entity;import java.io.Serializable;
import java.util.Objects;/*** 玩家类,玩家的相关信息*/
public class User implements Comparable<User>, Serializable {// 账号private String name;// 密码private String password;// 总的猜测数量、游戏的次数private Integer totalCount;// 总的积分private Integer totalPoints;// 玩家锁定、解锁的标记:false(解锁状态)true(锁定状态)private boolean isLock = false;public User() {}public User(String name, String password, Integer totalCount, Integer totalPoints) {this.name = name;this.password = password;this.totalCount = totalCount;this.totalPoints = totalPoints;}public User(String name, String password, Integer totalCount, Integer totalPoints, boolean isLock) {this.name = name;this.password = password;this.totalCount = totalCount;this.totalPoints = totalPoints;this.isLock = isLock;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getTotalCount() {return totalCount;}public void setTotalCount(Integer totalCount) {this.totalCount = totalCount;}public Integer getTotalPoints() {return totalPoints;}public void setTotalPoints(Integer totalPoints) {this.totalPoints = totalPoints;}public boolean isLock() {return isLock;}public void setLock(boolean lock) {isLock = lock;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", password='" + password + '\'' +", totalCount=" + totalCount +", totalPoints=" + totalPoints +", isLock=" + isLock +'}';}/*** equals 和 hashCode 可以帮助我们判断对象的唯一性* 当前类的唯一性的条件是:用户名字,玩家在注册时候可以保证唯一性* @param o* @return*/@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return Objects.equals(name, user.name);}@Overridepublic int hashCode() {return Objects.hash(name);}@Overridepublic int compareTo(User o) {return this.getName().compareTo(o.name);}
}

GameRecode.java 游戏记录实体类

package com.riu.collect.game2.entity;import java.io.Serializable;
import java.util.Date;/*** 每次游戏的记录信息*/
public class GameRecode implements Serializable {// 炸弹private Integer boom;// 猜测次数private Integer count;// 游戏开始时间private Date startTime;// 游戏结束时间private Date endTime;// 积分private Integer points;public Integer getBoom() {return boom;}public void setBoom(Integer boom) {this.boom = boom;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}public Date getStartTime() {return startTime;}public void setStartTime(Date startTime) {this.startTime = startTime;}public Date getEndTime() {return endTime;}public void setEndTime(Date endTime) {this.endTime = endTime;}public Integer getPoints() {return points;}public void setPoints(Integer points) {this.points = points;}@Overridepublic String toString() {return "GameRecode{" +"boom=" + boom +", count=" + count +", startTime=" + startTime +", endTime=" + endTime +", points=" + points +'}';}
}

自定义异常

AccountLockedException.java 账号锁定异常

package com.riu.collect.game2.exception;/*** 玩家账号锁定异常*/
public class AccountLockedException extends Exception {public AccountLockedException() {super();}public AccountLockedException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}

PasswordErrorException.java 密码错误异常

package com.riu.collect.game2.exception;/*** 玩家密码错误,认证失败*/
public class PasswordErrorException extends Exception {public PasswordErrorException() {super();}public PasswordErrorException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}

UnknowAccountException 账号不存在异常

package com.riu.collect.game2.exception;/*** 玩家账号不存在异常*/
public class UnknowAccountException extends Exception {public UnknowAccountException() {super();}public UnknowAccountException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}

游戏主类

Game.java 游戏主类

package com.riu.collect.game2;import com.riu.collect.game2.entity.GameRecode;
import com.riu.collect.game2.entity.User;
import com.riu.collect.game2.exception.AccountLockedException;
import com.riu.collect.game2.exception.PasswordErrorException;
import com.riu.collect.game2.exception.UnknowAccountException;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Stream;public class Game {// 创建一个用户的集合private List<User> userList = new ArrayList<>();// 玩家和记录的对应关系private Map<String, List<GameRecode>> recodeMap = new HashMap<>();// 当前登录的玩家名字private String loginName;// 判断玩家是登录的标记,默认 false 表示没有登录。// 等成功之后可以进行一些菜单操作boolean isLogin = false;// 两个文件路径private String userInfoPath = "src/com/riu/collect/game2/userInfo.txt";private String recodeInfoPath = "src/com/riu/collect/game2/recodeInfo.txt";// 定义公共的输入对象private Scanner scanner = new Scanner(System.in);public static void main(String[] args) {Game game = new Game();game.init();while (true){game.menu();}}/*** 初始化系统,从文件中将数据读取到 List*/private void init(){try {/* 用户玩家信息读取 */File userInfoFile = new File(userInfoPath);if(userInfoFile.exists()){ObjectInputStream oisUserInfoStream = new ObjectInputStream(new FileInputStream(userInfoPath));Object userInfoObject = oisUserInfoStream.readObject();if(userInfoObject != null){userList = (List<User>) userInfoObject;}oisUserInfoStream.close();}/* 用户玩家游戏记录读取 */File recodeInfoFile = new File(recodeInfoPath);if(recodeInfoFile.exists()) {ObjectInputStream oisRecodeInfoStream = new ObjectInputStream(new FileInputStream(recodeInfoPath));Object recodeObject = oisRecodeInfoStream.readObject();if (recodeObject != null) {recodeMap = (Map<String, List<GameRecode>>) recodeObject;}oisRecodeInfoStream.close();}} catch (Exception e) {throw new RuntimeException(e);}}public void menu(){System.out.println("===================================");System.out.println("\t\t\t1)注册");System.out.println("\t\t\t2)登录");if(isLogin){System.out.println("\t\t\t3)开始游戏");System.out.println("\t\t\t4)游戏记录");}System.out.println("\t\t\t5)游戏排行");System.out.println("\t\t\t6)退出游戏");System.out.println("\t\t\t7)玩家管理");System.out.println("===================================");System.out.print("请输入菜单编号:");int menuNum = scanner.nextInt();switch (menuNum) {case 1:// 注册reg();break;case 2:// 登录try {login();} catch (UnknowAccountException | PasswordErrorException | AccountLockedException e) {System.out.println(e.getMessage());}break;case 3:// 开始游戏startGame();break;case 4:// 展示游戏记录gameRecode();break;case 5:// 展示游戏排行榜gameTop();break;case 6:// 退出游戏exit();break;case 7:// 退出游戏userControl();break;}}/*** 注册*/private void reg() {System.out.print("请输入玩家昵称:");String name = scanner.next();System.out.print("请输入密码:");String password = scanner.next();// 把输入的信息封装到对象中User user = new User();user.setName(name);user.setPassword(password);// 判断集合中是否已经存在玩家信息// 这里使用 contains 对比,要求 user 类必须重写 equals 和 hashcode 方法if(userList.contains(user)){System.out.println("玩家已经存在,快去开始游戏吧...");} else {// 把对象添加到集合userList.add(user);System.out.println("注册成功,快去开始游戏吧...");}}/*** 登录* 1、账号是否存在* 2、账号密码是否匹配* 3、账号是否被锁定** 账号是用户输入的,根据用户输入的信息,递进验证账号是否可以使用。* 1、账号是否存在:拿着用户输入的信息,从集合中获取用户的信息对象。可以把用户对象临时存储一下。* 2、账号密码是否匹配:拿着用户输入的密码,和获取到的用户对象的密码对比。* 3、账号是否被锁定:根据获取到的用户的对象信息中的锁定状态判断。*/private void login() throws UnknowAccountException, PasswordErrorException, AccountLockedException {System.out.print("请输入玩家昵称:");String name = scanner.next();System.out.print("请输入密码:");String password = scanner.next();// 用于临时存储用户信息的对象User tempUser = null;// 循环遍历,找账号信息for (User item : userList) {String tempName = item.getName();// 用户输入的账号,和集合中获取的用户的账号对比// 找到用户了。if (name.equals(tempName)) {tempUser = item;break;}}// 基于账号信息(tempUser)做3种别判断// 1、账号是否存在if(tempUser == null){// System.out.println("账号不存在!");throw new UnknowAccountException("该玩家不存在!");} else {// System.out.println("账号存在!");// 2、账号密码是否匹配// 玩家输入的密码和 tempUser 的密码匹配if(password.equals(tempUser.getPassword())){// System.out.println("密码正确!");// 3、账号是否被锁定if(tempUser.isLock()){// System.out.println("账号被锁定");throw new AccountLockedException("账号被锁定!");} else {System.out.println("账号可用,登录成功!");// 玩家存在的标记修改为 trueisLogin = true;// 登录成功之后把当前玩家的名字赋值给全局的变量loginName = name;// 登录成功了,给当前用户创建一个用于存储游戏记录的list结果recodeMap.put(name, new ArrayList<>());}} else {// System.out.println("密码不正确,认证失败!");throw new PasswordErrorException("密码错误!");}}}/*** 开始游戏*/private void startGame() {// 可以给循环做一个标记:lab 就是这个循环的标记名字,名字可以任意。lab:while (true){/* 游戏本身需要的相关变量 */// 区间开始和结束int start = 0;int end = 100;/* 游戏本身需要的相关变量 *//* 游戏记录数据需要的相关变量 */// 每一轮游戏的过程// 随机炸弹int boom = new Random().nextInt(100);// 开始和结束时间Date startTime = new Date();Date endTime = null;// 每一轮游戏猜的次数int count = 0;// 每一轮游戏的积分变量int points = 0;/* 游戏记录数据需要的相关变量 */while (true){// 猜测次数的累加count++;System.out.print("请猜:");int num = scanner.nextInt();if(num > boom){end = num;} else if(num < boom){start = num;} else {System.out.println("💣游戏结束💣");/* 游戏结束才开始收集游戏信息:开始 */// 结束时间endTime = new Date();// 计算时间间隔long l = (endTime.getTime() - startTime.getTime()) / 1000;// 计算次数if (count >= 1 && count <= 3) {points = 10;} else if (count >= 4 && count <= 6) {points = 5;} else if (count >= 7 && count <= 10) {points = 2;} else {points = 0;}// 创建记录对象,封装游戏过程中的记录信息GameRecode gameRecode = new GameRecode();gameRecode.setBoom(boom);gameRecode.setCount(count);gameRecode.setStartTime(startTime);gameRecode.setEndTime(endTime);gameRecode.setPoints(points);// 这些记录是哪个玩家的。把记录和玩家挂钩。List<GameRecode> gameRecodeList = recodeMap.get(loginName);gameRecodeList.add(gameRecode);/* 游戏结束才开始收集游戏信息:结束 */// 跳出猜测的循环break;}System.out.println("游戏继续,区间是:[" + start + ", " + end + "]");}System.out.println("****************************************");System.out.println("\t\t\t1)继续游戏");System.out.println("\t\t\t2)返回菜单");System.out.println("****************************************");System.out.print("请输入菜单编号:");String menuNum = scanner.next();switch (menuNum) {case "1":// 结束的是 switchbreak;case "2":// 结束标记是 lab 的循环break lab;}}}/*** 展示当前用户的游戏记录*/private void gameRecode() {// 通过玩家和记录的Map集合,获取登录玩家的记录集合List<GameRecode> gameRecodeList = recodeMap.get(loginName);// 遍历当前玩家的记录集合System.out.println("序号\t炸弹\t次数\t开始时间\t\t\t\t结束时间\t\t\t\t积分");int i = 1;for (GameRecode gameRecode : gameRecodeList) {System.out.println(i++ + "\t" +gameRecode.getBoom()+ "\t" +gameRecode.getCount()+ "\t" +formatTime(gameRecode.getStartTime())+ "\t" +formatTime(gameRecode.getEndTime())+ "\t" +gameRecode.getPoints()+ "\t");}}/*** 格式化时间的方法* @param date* @return*/private String formatTime(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}/*** 按照积分的降序展示每个用户的信息* 用户的昵称、游戏次数、总积分(倒序)*/private void gameTop() {// 遍历用户结果集,汇总玩家的记录数据,循环走完之后,userList 中的每个玩家的游戏次数和总积分都会有值了for (User user : userList) {// 获取当前用户游戏记录的结果集List<GameRecode> gameRecodeList = recodeMap.get(user.getName());// 遍历游戏记录结果集,统计所有积分的和int sumPoints = 0;for (GameRecode gameRecode : gameRecodeList) {Integer points = gameRecode.getPoints();sumPoints += points;}// 将统计好的结果在赋值给用户对象user.setTotalCount(gameRecodeList.size());user.setTotalPoints(sumPoints);}System.out.println("-----------------------------------");System.out.println("\t\t\t1)升序展示");System.out.println("\t\t\t2)降序展示");System.out.println("-----------------------------------");System.out.print("请输入菜单编号:");String menuNum = scanner.next();System.out.println("昵称\t游戏次数\t总积分");// 默认升序排序,调用 sorted 之后返回一个可以继续操作的流Stream<User> newStream = userList.stream();switch (menuNum) {case "1":newStream = newStream.sorted(Comparator.comparing(User::getTotalPoints));break;case "2":newStream = newStream.sorted(Comparator.comparing(User::getTotalPoints).reversed());break;}// 输出放到最后newStream.forEach(user -> {System.out.println(user.getName()+ "\t" +user.getTotalCount() + "\t\t" +user.getTotalPoints());});// 根据积分倒叙排序// 1、List 转化为 Stream 流对象// 2、调用 Stream 的 sorted 方法进行排序// 3、sorted 需要传递一个排序的规则,这个规则是 Comparator 类型。这里思考:如何获取 Comparator 类型// 4、Comparator.comparing 方法可以返回一个 Comparator 类型,也就是排序的规则对象。其中还要知道排序的数据是哪个?是积分// 解析:Comparator.comparing 构建一个规则对象。方法传递要排序的关键字(数据属性)。reversed() 就是降序/*userList.stream().sorted(Comparator.comparing(User::getTotalPoints).reversed()).forEach(user -> {System.out.println(user.getName()+ "\t" +user.getTotalCount() + "\t\t" +user.getTotalPoints());});*/}/*** 结束游戏*/private void exit() {// 添加 IO 的操作,把玩家的信息写入到文件。try {/* 用户信息的存储 */// 也就是把 userList 的数据写入到文件File userInfoFile = new File(userInfoPath);if(!userInfoFile.exists()){userInfoFile.createNewFile();}// 创建对象的输出流ObjectOutputStream oosUserInfoSteam = new ObjectOutputStream(new FileOutputStream(userInfoFile));oosUserInfoSteam.writeObject(userList);oosUserInfoSteam.close();/* 用户游戏记录的存储 */// 也就是把 userList 的数据写入到文件File recodeFile = new File(recodeInfoPath);if(!recodeFile.exists()){recodeFile.createNewFile();}// 创建对象的输出流ObjectOutputStream oosRecodeInfoSteam = new ObjectOutputStream(new FileOutputStream(recodeInfoPath));oosRecodeInfoSteam.writeObject(recodeMap);oosRecodeInfoSteam.close();} catch (Exception e) {e.printStackTrace();System.out.println("文件操作异常!");}System.exit(0);}/*** 玩家管理:对玩家进行锁定和解锁*/private void userControl(){System.out.print("请输入要管理的玩家昵称:");// 要匹配的玩家名字String userName = scanner.next();User lockUser = null;boolean isLock = false;for (User user : userList) {String name = user.getName();if(userName.equals(name)){lockUser = user;break;}}if(lockUser != null){// 找到玩家之后,再进行业务处理System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");System.out.println("\t\t\t1)锁定玩家");System.out.println("\t\t\t2)解锁玩家");System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");System.out.print("请输入菜单编号:");String menuNum = scanner.next();switch (menuNum){case "1":isLock = true;break;case "2":isLock = false;break;}lockUser.setLock(isLock);System.out.println("^^^^^操作成功^^^^^");} else {System.out.println("该玩家不存在!");}}
}

相关文章:

【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储

Java 数字炸弹小游戏&#xff08;控制台版&#xff09; IO 数据存储 数字炸弹小游戏概述功能实现实体类User.java 玩家信息实体类GameRecode.java 游戏记录实体类 自定义异常AccountLockedException.java 账号锁定异常PasswordErrorException.java 密码错误异常UnknowAccountEx…...

今日头条躺赚流量:自动化新闻爬取和改写脚本

构建一个自动化的新闻爬取和改写系统&#xff0c;实现热点新闻的自动整理和发布&#xff0c;需要分为以下几个模块&#xff1a;新闻爬取、信息解析与抽取、内容改写、自动发布。以下是每个模块的详细实现步骤和代码示例&#xff1a; 1. 新闻爬取模块 目标&#xff1a;从新闻网…...

日常实习与暑期实习详解

日常实习与暑期实习详解 问了下正在实习的同学&#xff0c;发现天要塌了–才知道日常实习是没有笔试的 1. 实习的定义 1.1 日常实习 日常实习是企业长期招聘的实习岗位&#xff0c;通常没有时间限制。企业会在需要时进行招聘&#xff0c;招聘对象包括在校大学生和大一、大二的…...

Git的原理和使用(六)

本文主要讲解企业级开发模型 1. 引入 交付软件的流程&#xff1a;开发->测试->发布上线 上面三个过程可以详细划分为一下过程&#xff1a;规划、编码、构建、测试、发 布、部署和维护 最初&#xff0c;程序⽐较简单&#xff0c;⼯作量不⼤&#xff0c;程序员⼀个⼈可以完…...

Elasticsearch 中的高效按位匹配

作者&#xff1a;来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法&#xff0c;包括术语编码&#xff08;我喜欢的方法&#xff09;、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…...

LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构

关于lstm超参数设置&#xff0c;每个参数都有合适的范围&#xff0c;超过这个范围则lstm训练不再有效&#xff0c;loss不变&#xff0c;acc也不变 LSTM&#xff0c;全称长短期记忆网络&#xff08;Long Short-Term Memory&#xff09;&#xff0c;是一种特殊的循环神经网络&am…...

导出问题处理

问题描述 测试出来一个问题&#xff0c;使用地市的角色&#xff0c;导出数据然后超过了20w的数据&#xff0c;提示报错&#xff0c;我还以为是偶然的问题&#xff0c;然后是发现是普遍的问题&#xff0c;本地环境复现了&#xff0c;然后是&#xff0c;这个功能是三套角色&…...

通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪

用 手机自动化脚本&#xff0c;从自媒体上获取视频&#xff0c;一个商品对应几百个视频&#xff0c;我们把这几百个视频下载下来&#xff0c;进行分镜 视频切片&#xff0c;从自媒体上下载视频&#xff0c;通过cv库用直方图识别每个镜头进行切片。 下载多个图片进行视频的伪原…...

【机器学习】——numpy教程

文章目录 1.numpy简介2.初始化numpy3.ndarry的使用3.1numpy的属性3.2numpy的形状3.3ndarray的类型 4numpy生成数组的方法4.1生成0和1数组4.2从现有的数组生成4.3生成固定范围的数组4.4生成随机数组 5.数组的索引、切片6.数组的形状修改7.数组的类型修改8.数组的去重9.ndarray的…...

多线程——线程的状态

线程状态的意义 ‌线程状态的意义在于描述线程在执行过程中的不同阶段和条件&#xff0c;帮助开发者更好地管理和调度线程资源。 线程的多种状态 线程的状态是一个枚举类型&#xff08;Thread.State&#xff09;&#xff0c;可以通过线程名.getState&#xff08;&#xff09…...

开源数据库 - mysql - 组织结构(与oracle的区别)

组织形式区别 mysql&#xff08;Schema -> Table -> Column -> Row&#xff09; Schema&#xff08;方案&#xff09;&#xff1a; Scheme是关于数据库和表的布局及特性的信息。它可以用来描述数据库中特定的表以及整个数据库和其中表的信息&#xff0c;如表的一些特…...

vue3+vite 部署npm 包

公司需要所以研究了一下怎么部署安装&#xff0c;比较简单 先下载个vue项目 不用安准路由&#xff0c;pinna 啥的&#xff0c;只需要一个最简单的模版 删掉App.vue 中的其它组件 npm create vuelatest 开始写自定义组件 新建一个el-text 组件, name是重点&#xff0c;vue3中…...

华为鸿蒙HarmonyOS应用开发者高级认证视频及题库答案

华为鸿蒙开发者高级认证的学习资料 1、课程内容涵盖HarmonyOS系统介绍、DevEco Studio工具使用、UI设计与开发、Ability设计与开发、分布式特性、原子化服务卡片以及应用发布等。每个实验都与课程相匹配&#xff0c;帮助加深理解并掌握技能 2、学习视频资料 华为HarmonyOS开发…...

【计网】从零开始认识IP协议 --- 认识网络层,认识IP报头结构

从零开始认识IP协议 1 网络层协议1.1 初步认识IP协议1.2 初步理解IP地址 2 IP协议报头3 初步理解网段划分 1 网络层协议 1.1 初步认识IP协议 我们已经熟悉了传输层中的UDP和TCP协议&#xff0c;接下来我们来接触网络层的协议&#xff1a; 网络层在计算机网络中的意义主要体现…...

大一物联网要不要转专业,转不了该怎么办?

有幸在2014年&#xff0c;踩中了物联网的风口&#xff0c;坏消息&#xff0c;牛马的我&#xff0c;一口汤都没喝上。 依稀记得&#xff0c;当时市场部老大&#xff0c;带我去上海参加电子展会&#xff0c;印象最深的&#xff0c;一些物联网云平台&#xff0c;靠着一份精美PPT&a…...

LeetCode题练习与总结:4的幂--342

一、题目描述 给定一个整数&#xff0c;写一个函数来判断它是否是 4 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 4 的幂次方需满足&#xff1a;存在整数 x 使得 n 4^x 示例 1&#xff1a; 输入&#xff1a;n 16 输出&am…...

ubuntu GLEW could not be initialized : Unknown error

原因 某些ubuntu版本默认使用wayland协议&#xff0c;glew不支持 解决方法 1、编辑GDM3配置文件 sudo nano /etc/gdm3/custom.conf 2、修改配置文件 去掉#WaylandEnablefalse前的# 3、重启GDM3服务 sudo systemctl restart gdm3 修改后默认使用X11协议。...

51c~目标检测~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12371248 #目标检测x1 又一个发现 都不知道是第几了 是一个高效的目标检测 动态候选较大程度提升检测精度 目标检测是一项基本的计算机视觉任务&#xff0c;用于对给定图像中的目标进行定位和分类。 论文地址&#xff1a…...

前端工程化面试题

说一下模块化方案 模块化是为了解决代码的复用和组织问题&#xff0c;可以说有了模块化才让前端有了工程的概念&#xff0c;模块化要解决两大问题 代码隔离和依赖管理&#xff0c;从node.js最早发布的commonjs 到浏览器端的 AMD,CMD 规范以及兼容的 UMD 规范&#xff0c;再到现…...

【Visual Studio】下载安装 Visual Studio Community 并配置 C++ 桌面开发环境的图文教程

引言 Visual Studio 是一个面向 .NET 和 C 开发人员的综合性 Windows 版 IDE&#xff0c;可用于构建 Web、云、桌面、移动应用、服务和游戏。 安装步骤 访问 Visual Studio 的官方下载页面&#xff1a; https://visualstudio.microsoft.com/zh-hans/downloads/运行已下载的 V…...

010Editor:十六进制编辑器

介绍 世界上最好的十六进制编辑器和出色的文本编辑器 010 Editor 是用于处理文本和二进制数据的终极工具包。 添加模板 模板库https://www.sweetscape.com/010editor/repository/templates/ 先下载一个ELF 模板 运行模板...

Vscode中Github Copilot无法使用

现象 Copilot侧边栏显示要登录&#xff0c;但是点击"github登录"没有反应与Copilot对话&#xff0c;报错如下&#xff1a; Unexpected token o, "[object Rea"... is not valid JSON解决方案 在网上怎么找都没找到类似的问题&#xff0c;最后发现是Vsco…...

<项目代码>YOLOv8表情识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

利用Msfvenom实现对Windows的远程控制

1.实验准备 kali安装 Apache2&#xff08;如果尚未安装&#xff09;&#xff1a; sudo apt install apache2 启动 Apache2 服务&#xff1a; sudo systemctl start apache2确认 Apache2 的默认网页可以访问&#xff1a; 打开浏览器并访问 http://<你的Kali IP>&#xff…...

Java Iterator和for区别详解和常见问题及解决方式

在 Java 中&#xff0c;Iterator 是一个用于遍历集合元素的接口。它为访问集合中的元素提供了一种标准的方法&#xff0c;不管具体集合的实现如何。本文将详细讲解 Iterator 的使用、其与 for 循环的区别&#xff0c;以及在遍历集合时的删除操作可能带来的问题&#xff0c;并提…...

川渝地区软件工程考研择校分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 通过最新数据分析,5所高校软件工程专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南大学 对于想考川渝地区985但核心目标为优先上岸的考生,建议重点考虑西…...

快捷键记忆

快捷键记忆 文章目录 快捷键记忆前言一、PotPlayer快捷键二、电脑快捷键总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff1a; 一些软件的快捷键经常忘记&#xff0c;写这篇文章的目的是帮助我忘记的时候来查看。 顺序实时更新&#xff1a; 一、PotPlayer快捷键 Po…...

Flutter鸿蒙next 状态管理高级使用:深入探讨 Provider

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…...

JMeter实战之——模拟登录

本篇介绍使用JMeter 如何对需要登录的站点进行压力测试。 基本Session验证的机制 使用session进行请求验证的机制是一种常见的Web应用认证方式。 该认证方式的主要内容如下&#xff1a; 一、登录过程 用户输入&#xff1a;用户在登录页面输入用户名和密码。发送请求&#x…...

智能台灯设计(一)原理图设计

1. 前言 作者最近突发奇想&#xff0c;想自己做一个小台灯&#xff0c;设想的功能有&#xff1a;带锂电池可充电、可以调节亮度&#xff0c;后续通过增加WIFI模块实现手机控制开关功能。目前先实现最简单的功能&#xff0c;有时间再一步步完善吧。 2. 原理图设计 充电芯片使用…...

济南网站建设直播/seo网站排名优化公司

理解 C# 项目 csproj 文件格式的本质和编译流程 2018年05月19日 07:58:23 walter lv 阅读数 1901更多 所属专栏&#xff1a; NuGet .NET 编译过程 版权声明&#xff1a;本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发…...

莱山做网站的公司/一键优化免费下载

文/ IT创事记 祁萌人工智能变现的速度和能力超乎了传统行业的想象。即便在计算机视觉这样的“市场显学”中&#xff0c;一个独特的切入点就可以让一家创业公司在市场中崭露头角。华为北京城市峰会中&#xff0c;生态伙伴对云与AI格外关注。小视科技&#xff08;Minivision&…...

上海网站制作网站建设/线上销售培训机构

上个月导师要我做的一个小爬虫&#xff0c;分享一下过程 需求分析 目标url&#xff1a;AWS Fargate 价格-无服务器容器服务-AWS云服务 (amazon.com) 需要爬取网页中Fragate Spot的价格&#xff0c;但是不同区域价格不一样&#xff0c;并且价格每隔几个小时会有变化&#xff0c;…...

哪个彩票网站做代理反水高/班级优化大师学生版

原来我一开始以为的\( O(n^2) \)是调和级数\( O(nlog_2n) \)的&#xff01; 首先枚举猴王的桃子个数\( x \)&#xff0c;然后使用容斥原理&#xff0c;枚举有至少\( k \)个不满足的条件&#xff0c;那么这\( k \)个不满足的条件得组合个数为\( C_{m-1}^{k} \)&#xff0c;这\( …...

手工艺品网站建设/产品软文撰写

list的介绍 list的底层是双向带头链表&#xff0c;相对其他容器&#xff0c;list容器不支持随机访问节点&#xff0c;访问list容器的节点都是O(n)级别,但是插入删除都是O(1)级别。 list的迭代器使用 list的跟其他的容器的迭代器实现不同&#xff0c;类似vector容器的迭代器是…...

做科研有什么好的网站/链接点击量软件

摘要&#xff1a;本文从软件质量的有关概念出发&#xff0c;根据指标选取原则&#xff0c;在分析软件质量特征的基础上提出了相应的软件质量评估指标的选取原则&#xff0c;并进而建立了软件质量评估体系。关键词&#xff1a;软件质量 质量评估指标体系1 软件质量的有关概念软件…...