【详细实现】v1.0 随机点名应用

1.引言

  前面对这个应用的功能做了详细的分析(长什么样、能干什么),以先这样对一个项目最开始的分析成为需求分析,需求分析之后就是设计阶段。

  那么一般的项目,在设计阶段都需要干什么呢?在需求分析阶段确定需求后,设计阶段负责将需求转换为具体的系统设计方案。在这个阶段,开发团队会设计系统的整体结构、模块间的交互方式、数据存储方案等。设计阶段的目标是为开发团队提供一个清晰的指导方向,确保系统设计满足需求和性能要求。

  如上所知,我们的项目在设计阶段主要思考数据、模块功能相关的任务。那么在这个随机点名应用中,我们应该关注哪些内容呢?

  注意:上面的需求分析阶段、设计阶段是我们按照软件工程开发软件的过程进行划分的,这样的好处是让我们开发一个项目的时候思路更为清楚,这个阶段的划分也是程序员积累了大量经验之后

来划分的,注意前后关系:现有软件的开发、再有这些阶段方法的划分。那么我想和同学们表达的是,你在开发一个项目的时候,不要硬拗这个步骤,要针对你的项目具体来分析,这些专业名词是将我们的开发步骤高度凝练了,你在第一次学习项目的开发的时候,要多思考!思考自己去实现去完成这个项目该如何做!

  ok,再回到我们这个项目的设计中,需要关注数据、功能模块之间的交互。

前面我们简单写到:

          数据:程序内直接写入(集合或文件导入)
          界面:无特效、只显示

那么,接下来我们详细去思考如何处理。新建一个工程一起动手开始做吧!

2.数据来源与处理

2.1  ArrayList集合保存数据

方法一:直接用一个集合保存,在这里我们用新学到的ArrayList集合来保存我们的学生名字。

import java.util.ArrayList;public class StudentListExample {public static void main(String[] args) {// 创建一个ArrayList来保存学生名字数据ArrayList<String> studentNames = new ArrayList<>();// 添加学生名字数据studentNames.add("张三");studentNames.add("李四");studentNames.add("王五");studentNames.add("赵六");// 打印输出学生名字数据System.out.println("学生名字列表:");for (String name : studentNames) {System.out.println(name);}}
}

在这里,我们可以看到用前面学习的add方法能够添加学生的名字到studentNames对象中,但是同学们发现这样一个个加名字的方式很麻烦!如果有200个学生,你也要写200行add()方法吗?所以,修改上面的这个代码,用前面学到的数组、循环的方式,将学生的数据加入studentNames 对象中。

先自己思考,如何实现,再参考以下代码:

如果你修改好了,点击这个链接看看参考代码如何写!

2.2  升级:使用文件导入数据保存到ArrayList集合

上面,大家可以发现是直接将数据写进程序里面的,在实际开发中,我们的数据往往是来源于文件:txt、csv等等,而且数据也是庞大的。那么有没有比较好的方法能让我们直接将准备好的文件数据导入进去呢?

首先,我们得准备一个名字文件。如截图所示:

在这里要注意到,我们保存名字的txt文件中,每一行保存一个名字,每一行的形式都是“编号。名字”来保存,那么我们在读取的时候应该对数据进行处理。(分割处理)

然后使用File类来读取文件:names.txt

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建一个 ArrayList 对象来存储读取的中文名字ArrayList<String> chineseNames = new ArrayList<>();try {// 创建一个 File 对象,指向名为 "names.txt" 的文件File file = new File("names.txt");Scanner scanner = new Scanner(file);// 逐行读取文件内容while (scanner.hasNextLine()) {// 读取一行数据String data = scanner.nextLine();// 根据 "." 进行分割String[] parts = data.split("\\.");// 如果成功分割成两部分(数字和名字)if (parts.length == 2) {// 获取名字部分并去除空格后存储到 ArrayList 中String name = parts[1].trim();chineseNames.add(name);}}scanner.close();System.out.println("读取的中文名字列表:");// 输出处理后的名字列表for (String name : chineseNames) {System.out.println(name);}} catch (FileNotFoundException e) {System.out.println("找不到文件");e.printStackTrace();}}
}

除此之外,大家还要注意文件的存取路径,names.txt应该放在你工程下面,如图所示。

将上面的代码测试运行,你的控制台上应该输出这样的内容:

由上可知,我们的名字无论是通过第一种还是第二种方式,都可以保存到对应的ArrayList类对象中。

3.核心点名功能的实现

现在数据有了,接下来是实现点名功能,那么怎么实现呢?

还记得前面学过的随机数类吗?Random类的核心方法再给大家回顾一下:

  1. nextInt(): 生成一个随机的整数,范围是整数的全部取值范围,包括负数和正数。

  2. nextInt(int bound): 生成一个随机的整数,范围是 [0, bound),即大于等于 0,小于 bound。

  3. nextLong(): 生成一个随机的长整数。

  4. nextDouble(): 生成一个随机的双精度浮点数,范围是 [0.0, 1.0),包括 0.0,不包括 1.0。

  5. nextFloat(): 生成一个随机的单精度浮点数,范围是 [0.0, 1.0),包括 0.0,不包括 1.0。

  6. nextBoolean(): 随机生成一个布尔值,即 true 或 false

  7. nextBytes(byte[] bytes): 生成随机的字节数组,填充给定的字节数组 bytes

  8. setSeed(long seed): 设置随机数生成器的种子,相同的种子将产生相同的随机序列。

那么,核心的点名功能该如何实现呢?大家动手尝试,采用Random类随机给我们的chineseNames这个里面的数据,随机选出一个。

代码很简单,简洁的写法只需要三行!

如果你动手尝试了,看一下这个参考代码吧。

运行程序,可以看到随机选取了一个名字!

4.交互界面的实现

4.1 交互界面类介绍

Swing 是 Java 提供的一套用于创建图形用户界面(GUI)的工具包。它提供了丰富的组件库,可以用于构建各种交互式和可视化的应用程序,如桌面应用程序、工具、游戏等。Swing 是 Java 提供的官方 GUI 工具包,因此具有很好的跨平台性,可以在不同操作系统上运行而无需对代码进行修改。

Swing 的特点包括:

  1. 组件丰富:Swing 提供了各种常用的 GUI 组件,如按钮、标签、文本框、列表框、下拉框、表格等,开发者可以通过组合这些组件来构建复杂的界面。

  2. 可定制性强:Swing 组件支持丰富的外观和行为定制,可以通过设置属性、样式、监听器等来实现界面的个性化设计。

  3. 事件驱动:Swing 使用事件驱动的模型,开发者可以为组件添加各种事件监听器,以便在用户交互时做出相应的处理。

  4. 跨平台性:Swing 是基于 Java 编写的,可以在不同操作系统上运行而无需修改代码。这使得开发者可以编写一次代码,就能在多个平台上部署应用程序。

  5. 轻量级:Swing 是一个轻量级的 GUI 工具包,不依赖于操作系统的 GUI 组件,而是使用 Java 绘制组件,因此具有较小的内存占用和启动时间.

Swing用法的简单展示

4.2 加入可视化界面

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ChineseNameGeneratorGUI extends JFrame {private JLabel nameLabel;private JButton generateButton;private ArrayList<String> chineseNames;public ChineseNameGeneratorGUI() {setTitle("随机点名");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400, 200);setLocationRelativeTo(null);  // 让窗口居中显示nameLabel = new JLabel("点击按钮生成随机名字");nameLabel.setHorizontalAlignment(SwingConstants.CENTER);  // 设置文本居中generateButton = new JButton("生成");generateButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {File file = new File("names.txt");Scanner scanner = new Scanner(file, "UTF-8");chineseNames.clear();while (scanner.hasNextLine()) {String data = scanner.nextLine();String[] parts = data.split("\\.");if (parts.length == 2) {String name = parts[1].trim();chineseNames.add(name);}}scanner.close();Random random = new Random();int randomIndex = random.nextInt(chineseNames.size());String selectedName = chineseNames.get(randomIndex);nameLabel.setText("随机选择的名字是:" + selectedName);} catch (FileNotFoundException ex) {nameLabel.setText("找不到文件");ex.printStackTrace();}}});chineseNames = new ArrayList<>();JPanel panel = new JPanel();panel.setLayout(new BorderLayout());panel.add(nameLabel, BorderLayout.CENTER);panel.add(generateButton, BorderLayout.SOUTH);add(panel);setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new ChineseNameGeneratorGUI();}});}
}

程序运行结果

5.IntelliJ IDEA来打包和发布Java程序

5.1 打包成可执行jar包

5.2 将jar包拷贝到桌面上,点击运行即可

如果你生成的jar文件到桌面变成压缩包,那么 你可以这样调试

或者采用此方法

5.3 打包成exe发布

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

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

相关文章

世界读书日,正在为管理团队而烦恼?听书690本的我最推荐的3本书

前言 今天是世界读书日&#xff0c;如果你是新晋管理者&#xff0c;或者将来想晋升管理这条线。可以参考以下实操性很强&#xff0c;很容易上手的三本团队书籍。 Top3书籍&#xff1a;《10人以下小团队管理手册》《所有问题&#xff0c;七步解决》《可复制领导力》 Top1&#…

数仓建模—数据语义层

数仓建模—数据语义层 什么是语义层 如今,企业产生大量数据,需要以正确的方式进行分析才能做出重要决策。数据可能来自多个来源并采用不同的格式,这使得清楚地了解其含义和重要性成为一项挑战。这就是语义层的用武之地。 语义层存在于数据仓库和最终用户使用的应用程序之间…

【计算机毕业设计】jspm医院门诊挂号系统——后附源码

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

【深度学习(1)】研0和研1如何上手深度学习及定方向

深度学习&#xff08;1&#xff09; 基础部分书籍鱼书 (理论部分) 视频课程我是土堆&#xff08;代码部分&#xff09; 提升部分李沐的动手学深度学习李沐老师的书 定方向网站&#xff1a; paperwithcode谷歌学术找论文 基础部分 书籍 鱼书 (理论部分) 适合入门&#xff0c;…

探索 去中心化的Web3.0

随着区块链技术的日益成熟和普及&#xff0c;Web3&#xff08;Web 3.0&#xff09;已经成为一个无法忽视的趋势。Web3不仅仅是一个技术概念&#xff0c;更是一个去中心化、透明、用户数据拥有权归还给用户的互联网新时代。在这篇文章中&#xff0c;我们将深入探讨Web3技术的核心…

如何启用启用WordPress调试模式

最近我们的WordPress网站在访问时&#xff0c;经常出现打不开的现象&#xff0c;我们向主机提供商Hostease咨询后&#xff0c;他们提到这是由于WordPress的某个插件导致的问题&#xff0c;我们在将插件版本升级至最新后&#xff0c;这个问题就消失了。为了方便后续的检查&#…

如何判断客户需求能不能做出来产品?

在做G端产品的过程中,为了让产品可以符合客户实际需求,我们需要经历客户需求调研的这个环节。那么,需求收集后,我们要从什么维度判断客户的需求是否真的可以产品化呢? 我们做G端产品,新产品的方向几乎100%来自于政策。所以才会有“政策带来产品,产品催生政绩”。 可就算…

TypeScript 完整篇,考前必看,一网打尽所有的面试题

其实 ts 相关的面试题目很少&#xff0c;常问的就那么几个&#xff0c;但是呢&#xff0c;有这么个问题。就是如果面试官问我范型是什么&#xff0c;可能我还能说上几句&#xff0c;但是如果他直接说&#xff0c;说说你对 ts 的理解&#xff1f;为什么要用 ts 这样以来就有点迷…

第十四章大数据和数据科学4分

14.1 引言 14.1.3 科学理念 1.数据科学 数据科学将数据挖掘、统计分析和机器学习与数据集成整合&#xff0c;结合数据建模能力&#xff0c;去构建预测模型、探索数据内容模式。 数据科学依赖于&#xff1a; 1&#xff09;丰富的数据源。具有能够展示隐藏在组织或客户行为中不…

Swift 周报 第四十九期

文章目录 前言新闻和社区苹果公司公布重大调整143亿&#xff01;苹果这个瓜真的有点大啊 提案通过的提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第四十九期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#x…

Springboot+Vue项目-基于Java+MySQL的非物质文化网站设计与实现(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…

python来实现nmap扫描

今天分享一个用python实现nmap扫描的方法&#xff0c;以下是实现步骤 代码如下&#xff1a; import subprocessmissing_ips {166.139.144.163, 31.47.8.35, 58.242.86.191, 212.178.135.62, 103.1.35.114} port "7" for missing_ip in missing_ips:# 构造nmap命令…

web项目运行时,报了500错误(HTTP Status 500 – Internal Server Error)

web项目运行时&#xff0c;报了500错误&#xff08;HTTP Status 500 – Internal Server Error&#xff09; 文章目录 web项目运行时&#xff0c;报了500错误&#xff08;HTTP Status 500 – Internal Server Error&#xff09;前言一、 解决方法&#xff1a;Project Structure…

SpringMVC中的文件上传和中英文名称文件下载

一、文件上传 前端&#xff1a; <% page language"java" contentType"text/html;charsetUTF-8"pageEncoding"UTF-8"%> <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4…

指令和界面【Linux】

指令和界面 前言一、指令 vs 界面交互的需求满足需求的第一阶段——指令满足需求的第二阶段-界面时间 二、指令和界面交互区别为什么要学命令行总结 前言 Linux操作系统提供了丰富的命令行界面和图形用户界面工具&#xff0c;用户可以根据自己的需求选择适合的界面进行操作。命…

【编程Tool】小熊猫C/C++的安装使用及配置保姆级教程

目录 1.软件介绍 2.软件下载地址 3.安装 3.1.下载得到可执行文件 3.2. 双击可执行文件等待下载 3.3. 选择语言 3.4. 阅读协议并点击我接受 3.5. 组件保持默认并点击下一步(N) 3.6. 更换安装路径 3.7. 等待安装 3.8. 点击完成 4.配置及使用 4.1. 选择主题及语言 4.2. 进入默认界…

拼多多面试题——力扣版测试用例纠错

最近我看到力扣上这个题目&#xff0c;用了三种方法&#xff0c;结果没有一种正确&#xff0c;我就纳闷儿了&#xff0c;为何总有一个测试用例过不了&#xff0c;结果我发现这个测试用例确实有问题啊。。。。。 题目&#xff1a; 表&#xff1a;Logs ----------------------…

架构师系列-MYSQL调优(八)- 索引多表优化案例

用户手机认证表 该表约有11万数据,保存的是通过手机认证后的用户数据关联字段: user_id CREATE TABLE mob_autht (id int(11) NOT NULL AUTO_INCREMENT COMMENT 标识,user_id int(11) NOT NULL COMMENT 用户标识,mobile varchar(11) NOT NULL COMMENT 手机号码,seevc_pwd varc…

图像处理技术与应用(一)

图像处理技术与应用入门 使用skimage进行图像读取和显示 skimage库&#xff08;Scikit-image&#xff09;提供了一个强大的工具集&#xff0c;用于执行各种图像处理任务。以下是如何使用skimage读取和显示图像的基本示例&#xff1a; from skimage import ioimg io.imread(…