数组与集合的应用-数组演练

1、获取一维数组最小值

1.1 实例说明

        一维数组常用于保存线性数据,例如数据库中的单行数据就可以使用一维数组保存。本实例接收用户在文本框中输入的单行数据,其中数据都是整数数字,以不同数量的空格分割数字,如图1所示。这个先行数据将被程序分解成一维数组,并从数组中提取最小值显示在界面中。

图1  实例运行结果

        说明:程序经过特殊判断,数字之间的空格可以使用多个。

1.2 实现过程

        (1)在项目中新建窗体类ArrayMinValue。在窗体中添加一个文本框和“计算”按钮以及标签控件。

        (2)编写“计算”按钮的事件处理方法,在该方法中获取用户的输入,并通过trim()方法去除左右空格字符。对字符串内容进行检测,排除非法输入,并把字符串转换为整形数组,然后在遍历数组的同时把最小值提取并显示到窗体标签控件中。关键代码如下:

protected void do_button_actionPerformed(ActionEvent e) {String arrayStr = textField.getText().trim();for (int i = 0; i < arrayStr.length(); i++) {// 过滤非法输入char charAt = arrayStr.charAt(i);if (!Character.isDigit(charAt) && charAt != ' ') {JOptionPane.showMessageDialog(null, "输入包含非数字内容");textField.setText("");return;}}String[] numStrs = arrayStr.split(" {1,}");// 分割字符串int[] numArray = new int[numStrs.length];// 创建整数数组// 转换输入为整数数组for (int i = 0; i < numArray.length; i++) {numArray[i] = Integer.valueOf(numStrs[i]);}int min = numArray[0];// 创建最小数变量for (int j = 0; j < numArray.length; j++) {if (min > numArray[j]) {// 提取最小整数min = numArray[j];}}label.setText("数组中最小的数是:" + min);
}

1.3 秘笈心法

1.3.1 精简的for语句

        for语句用于程序的循环流程控制。该语句有3个表达式用于循环变量的控制,其完整语法格式为:

for(int i=0; i<100; i++){

            ……

}

        for语句中的3个表达式不是完全必备的,可以根据情况部分省略,甚至完全省略,例如下面代码就以最简单的格式实现了无限循环。

for (;;) {

    ……

}

2、将二维数组中的行列互换

2.1 实例说明

        数组是程序开发中最常用的,其中二维数组使用最频繁,它可以存储表格数据,根据数组下标索引可以加入各种运算,图片的关键运算方法也是以而为数组为基础进行矩阵运算的。作为数组知识的巩固,本实例实现数组模拟表格行与列数据交换,这在程序开发中常用语表格数据整理。实例运行结果如图1所示。

 

图1  实例运行结果

 2.2 实现过程

(1)在项目中新建ArrayRowColumnSwap类。在该类的主方法中定义一个二维数组,输出该数组的内容,这次输出是为了与交换数据后的数组进行对比。新创建一个同样大小的二维数组,利用双层for循环遍历数组时,把新数组与原数组的行列索引交换进行元素赋值,然后在输出新数组内容。关键代码如下:

public static void main(String[] args) {// 创建2维数组int arr[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };System.out.println("行列互调前:");// 输出2维数组printArray(arr);int arr2[][] = new int[arr.length][arr.length];for (int i = 0; i < arr.length; i++) {// 调整数组行列数据for (int j = 0; j < arr[i].length; j++) {arr2[i][j] = arr[j][i];}}System.out.println("行列互调后:");// 输出2维数组printArray(arr);
}

        说明:本实例为演示数组行列兑换定义了连续数字作为数组元素,这样更方便对比交换后的结果。

        (2)编写输出数组内容的pringArray()方法。输出数组内容的业务在程序中出现两次,根据代码重用的原则,如果相同的业务代码在程序中出现两次以上,就应该把它们提取成一个独立的方法。在这个方法中简单的通过双层for循环遍历数组元素,关键代码如下:

private static void printArray(int[][] arr) {for (int i = 0; i < arr.length; i++) {// 遍历数组for (int j = 0; j < arr.length; j++) {System.out.print(arr[i][j] + " ");// 输出数组元素}System.out.println();}
}

2.3 秘笈心法

2.3.1 数组不能声明长度

        在Java语言中定义数组变量时,不能声明其长度,只能在new关键字创建数组时指定,例如int[9] array =……是错误的写法。应该是int[] array = new int[9]。

3、利用数组随机抽取幸运观众

3.1 实例说明

        在电视节目中,经常看到随机抽取幸运观众。如果观众抽取得范围较少,可以让程序使用数组实现,而且效率很高。下面介绍实现的方法:首先将所有观众姓名生成数组,然后获得数组元素的总数量,然后在数组元素中随机抽取元素的下标,根据抽取的下标获得幸运观众。运行效果如图1所示。

图1  实例运行结果

3.2 关键技术

        本实例中的重点是把字符串中的人员名单分割为数组,以及随机生成数组下标索引,这分别需要用到String类的split()方法和Math类的random()方法,下面对这两个方法进行简单介绍。

3.2.1 字符串分割为数组

        String类的split()方法可以根据指定的正则表达式对字符串进行分割,并返回分割后的字符串数组,例如“a,b,c”如果以“,”作为分隔符,返回值就是包含“a”,“b”和“c”3个字符串的数组。该方法的声明如下:

public String[] split(String regex)

参数说明:

        regex:分割字符串的定界正则表达式。

3.2.2 生成随机数

        抽奖当然是随机抽取的,这就需要用到随机数,Java在Math类中提供了静态方法random()可以生成0到1之间的double类型随机数值。该方法的声明如下:

public static double random()

        由于该方法生成的是0到1之间的小数,而数组下标是整数而且又要根据数组长度来生成随机数,所以要把生成的随机数与数组长度相乘,就像本实例中的算法那样,关键代码如下:

int index = (int) (Math.random() * personnelArray.length);// 生成随机数组索引

这句代码把随机数与数组长度的乘积转换为整形作为随机数组下标索引。

 3.3 实现过程

        (1)在项目中创建窗体类,在窗体中添加两个文本域、一个文本框和两个按钮,其中两个按钮分别用于抽取幸运观众和退出程序。

        (2)为文本框添加按键事件监听器,并编写事件处理方法,当用户在文本框中输入观众姓名并按下回车键时,事件处理方法将观众姓名添加到文本域中并以回车换行作为分割符,然后选择文本框中所有文本准备接收用户的下一次输入。关键代码如下:

protected void do_textField_keyPressed(KeyEvent e) {if (e.getKeyChar() != '\n')// 不是回车字符不做处理return;String name = nameField.getText();if (name.isEmpty())// 如果文本框没有字符串不做处理return;personnelArea.append(name + "\n");// 把输入人名与回车符添加到人员列表nameField.selectAll();// 选择文本框所有字符
}

        (3)编写“抽取”按钮的事件处理方法,在该方法中把文本域保存的所有观众名称分割成字符串数组,然后通过随机数生成数组下标,当然这个下标是不固定的。然后在另一个文本域控件中输出抽取幸运观众的颁奖信息。关键代码如下:

protected void do_button_actionPerformed(ActionEvent e) {String perstring = personnelArea.getText();// 获取人员列表文本String[] personnelArray = perstring.split("\n{1,}");// 获取人员数组int index = (int) (Math.random() * personnelArray.length);// 生成随机数组索引// 定义包含格式参数的中奖信息String formatArg = "本次抽取观众人员:\n\t%1$s\n恭喜%1$s成为本次观众抽奖的大奖得主。"+ "\n\n我们将为%1$s颁发:\n\t过期的酸奶二十箱。";// 为中奖信息添加人员参数String info = String.format(formatArg, personnelArray[index]);resultArea.setText(info);// 在文本域显示中间信息
}

3.4 秘笈心法

3.4.1 数组的静态初始化

        在创建与初始化数组时,通常是先定义指定类型的数组变量,然后new关键字创建数组,在分别对数组元素进行赋值。例如:

int[] array = new int[3];

array[0]=1;

array[1]=2;

array[2]=3;

        Java支持静态数组初始化,在定义数组的同时为数组分配空间并赋值。例如:

int[] array = { 1, 2, 3, 4};

4、用数组设置JTable表格的列名与列宽

4.1 实例说明

        数组在程序开发中被广泛应用,使用数组可以是程序代码更加规范,更易于维护。例如字符串数组可以定义表格控件的列名称,而整数类型数组可以用来定义列对应的宽度,本实例就通过这两个数组实现了对表格控件中表头列的设置,如图1所示。

图1  实例运行结果

4.2 关键技术

        本实例的关键技术在于设置表格的数据模型和访问列模型。其中表格的数据模型可以采用DefaultTableModel类创建数据模型对象,而创建过程中可以把字符串数组作为参数来创建表格列的名称。下面介绍一下这些关键技术的语法。

4.2.1 创建表格数据模型

        DefaultTableModel类的构造方法有很多,其中一个可以把字符串数组作为参数来生成列名称,同时接收int类型的参数来设置表格添加多少行空白数据。这个构造方法的声明如下:

public DefaultTableModel(Object[] columnNames, int rowCount)

参数说明:

columnNames:存放列名的数组

rowCount:指定创建多少行空白数据

4.2.2 设置表格数据模型

        JTable类是表格控件,它提供了setModel()方法来设置表格的数据模型,设置数据模型以后,表格控件可以从数据模型中提取表头所有列名称和所有行数据,这个数据模型将负责表格所有数据的维护。下面介绍该设置表格模型的方法声明格式:

public void setModel(TableModel dataModel)

参数说明:

dataModel:此表的新数据模型。

4.2.3 获取表格列模型

        表格中所有列对象都存放在列模型中,它们用于定义表格的每个列的名称及宽度等信息。表格的列模型可以通过getColumnModel()方法获取。其方法声明如下:

public TableColumnModel getColumnModel()

4.2.4 设置列宽度

        列对象存放在列模型中,并且列的宽度需要通过列对象的setPreferredWidth()方法来设置,该方法的语法声明如下:

public void setPreferredWidth(int preferredWidth)

参数说明:

preferredWidth:列对象的首选宽度参数

 4.3 实现过程

        (1)在项目中创建窗体类ArrayCreateTable。在窗体中添加一个滚动面板。

        (2)编写getTable()方法来创建表格,在该方法中声明字符串数组columns作为表格的列名,在声明int类型的数组来定义每个表格列的宽度。然后创建表格的数据模型并遍历所有表格列对象,根据int类型数组的索引来设置表格列的宽度。关键代码如下:

private JTable getTable() {if (table == null) {table = new JTable();// 创建表格// 定义列名数组String[] columns = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六","星期日" };// 定义列宽数组int[] columnWidth = { 10, 20, 30, 40, 50, 60, 70 };// 创建表格数据模型DefaultTableModel model = new DefaultTableModel(columns, 15);table.setModel(model);// 设置表格数据模型TableColumnModel columnModel = table.getColumnModel();// 获取列模型int count = columnModel.getColumnCount();// 获取列数量for (int i = 0; i < count; i++) {// 遍历列TableColumn column = columnModel.getColumn(i);// 获取列对象column.setPreferredWidth(columnWidth[i]);// 以数组元素设置列的宽度}}return table;
}

4.4 秘笈心法

4.4.1 给表格列名留个位置

        如果直接将表格控件添加到滚动面板以外的容器中,首先应该通过JTable类的getTableHeader()方法获取表格的JTableHeader表头类的对象,然后在将该对象添加到容器相应的位置,否则表格将没有表头,无法显示任何列名称。

 ******************************关于作者******************************

学习过程中有任何问题不懂得都可以进行咨询,欢迎来撩!

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

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

相关文章

Spring相关知识补充

目录 一、将Bean存储到spring&#xff08;容器&#xff09;中 1、使用spring-config的方式将对象存储到spring容器中 2、使用类注解的方式将Bean对象存储到容器中 1️⃣、配置扫描路径&#xff08;使用注解的方式存对象的前提&#xff09; 2️⃣、使用五大类注解存储Bean对…

C语言练习

接下来一段时间&#xff0c;博主要参加军训没有时间更新C语言知识点&#xff0c;但博主会每天更新一道C语言的题作为分享。 1.计算并显示整数的差 分析&#xff1a;1.题目并不难&#xff0c;首先我们要知道printf这个库函数&#xff0c;是用来打印数据到屏幕的库函数 2.设置变…

【AI知识点】反向传播(Backpropagation)

反向传播&#xff08;Backpropagation&#xff09; 是训练神经网络的核心算法&#xff0c;它通过反向逐层计算损失函数对每个权重的梯度&#xff0c;来反向逐层更新网络的权重&#xff0c;从而最小化损失函数。 一、反向传播的基本概念 1. 前向传播&#xff08;Forward Propag…

文件丢失一键找回,四大数据恢复免费版工具推荐!

丢失数据的情况虽然不经常出现&#xff0c;但一旦出现都会让人头疼不已&#xff0c;而这时候&#xff0c;要如何恢复丢失的数据呢&#xff1f;一款免费好用的数据恢复工具就派上用场了&#xff01;接下来就为大家推荐几款好用的数据恢复工具&#xff01; 福昕数据恢复 直达链…

Redis list 类型

list类型 类型介绍 列表类型 list 相当于 数组或者顺序表 list内部的编码方式更接近于 双端队列 &#xff0c;支持头插 头删 尾插 尾删。 需要注意的是&#xff0c;Redis的下标支持负数下标。 比如数组大小为5&#xff0c;那么要访问下标为 -2 的值可以理解为访问 5 - 2 3 …

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

272. 包基本介绍 272.1 看一个应用场景 272.2 包的三大作用 272.3 包的基本语法 273. 包原理 274. 包快速入门 在不同的包下面创建不同的Dog类 275. 包命名 276. 常用的包 一个包下,包含很多的类,java 中常用的包有: java.lang.* //lang 包是基本包&#xff0c;默认引入&…

农业政策与市场分析:解读当前政策导向下的农业发展趋势

在快速变化的全球经济格局中&#xff0c;农业作为国家稳定发展的基石&#xff0c;其政策走向与市场动态备受瞩目。本文将深入剖析当前的农业政策背景&#xff0c;探讨其对设计的导向作用&#xff0c;以及市场趋势的反馈与影响&#xff0c;为农业可持续发展提供洞见。 1. 政策背…

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》&#xff0c;该书作者Michael Nielsen&#xff0c;Y Combinator Research的研究员&#xff0c;是多年之前自己看的一本基础书籍&#xff0c;很适合入门了解一些关于深度学习的概念知识&#xff0c;当然也包含了一些小…

MyBatis 批量插入方案

MyBatis 批量插入 MyBatis 插入数据的方法有几种&#xff1a; for 循环&#xff0c;每次都重新连接一次数据库&#xff0c;每次只插入一条数据。 在编写 sql 时用 for each 标签&#xff0c;建立一次数据库连接。 使用 MyBatis 的 batchInsert 方法。 下面是方法 1 和 2 的…

三相逆变器中LCL滤波器分析

1.LCL滤波器 传统三相逆变器使用的是L型滤波器&#xff0c;其设计简单&#xff0c;但也存在着一些问题&#xff0c;如在同样的滤波效果下&#xff0c;L型滤波器电感尺寸、重量较大&#xff0c;成本较高&#xff0c;并且随着电感值的增大&#xff0c;其上的电压降增加比较明显&…

【MySQL必知会】事务

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 事务概念 &#x1f4c1; 事务操作 &#x1f4c1; 事务提交方式 &#x1f4c1; 隔离级别 &#x1f4c1; MVCC &#x1f4c2; 3个隐藏列字段 &#x1f4c2; undo日志 &#x1f4c2; Read View视图 &#x1f4c1; RR和R…

【GESP】C++一级练习BCQM3028,输入-计算-浮点型格式化输出

目前的几道题主要围绕浮点型的计算和格式化输出。强化基础语法练习。 详解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3028/ 【GESP】C一级练习BCQM3028&#xff0c;输入-计算-浮点型格式化输出 | OneCoder目前的几道题主要围绕浮点型的计算和格式化输出。强化基础语…

说说BPMN概念及应用

BPMN&#xff08;Business Process Modeling and Notation&#xff09;即业务流程建模与标注&#xff0c;是一种由OMG&#xff08;Object Management Group&#xff0c;对象管理组织&#xff09;制定的业务流程建模语言。以下是对BPMN标准的详细解释&#xff1a; 一、BPMN的起…

短剧系统源码短剧平台开发(H5+抖小+微小)部署介绍流程

有想法加入国内短剧赛道的请停下脚步&#xff0c;耐心看完此篇文章&#xff0c;相信一定会对您有所帮助的&#xff0c;下面将排序划分每一个步骤&#xff0c;短剧源码、申请资料、服务器选择、部署上架到正常运行等几个方面&#xff0c;整理了一些资料&#xff0c;来为大家举例…

Spring Boot助力医院数据管理

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

MySQL进阶学习一(2024.10.07版)

2024-10-06 -------------------------------------------------------------------------------------------------------------------------------- 1.一条SQL语句是如何执行的 单进程的多线程模型 MySQL的物理目录 show global variables like "%basedir%"; …

LSTM时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测

本文内容&#xff1a;Python实现LSTM长短期记忆神经网络时间序列预测&#xff0c;使用的数据集为AirPassengers 目录 数据集简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 数据集简介 AirPassengers 数据集的来源可以追溯到经典的统计和时间序列分析文献。原始数据集由 Box,…

面向对象特性中 继承详解

目录 概念&#xff1a; 定义&#xff1a; 定义格式 继承关系和访问限定符 基类和派生类对象赋值转换&#xff1a; 继承中的作用域&#xff1a; 派生类的默认成员函数 继承与友元&#xff1a; 继承与静态成员&#xff1a; 复杂的菱形继承及菱形虚拟继承&#xff1a; 虚…

VGG16模型实现MNIST图像分类

MNIST图像数据集 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;是一个经典的机器学习数据集&#xff0c;常用于训练和测试图像处理和机器学习算法&#xff0c;特别是在数字识别领域。该数据集包含了大约 7 万张手写数字图片&#xf…

喜讯 | 攸信技术入选第六批专精特新“小巨人”企业

日前&#xff0c;根据工信部评审结果&#xff0c;厦门市工业和信息化局公示了第六批专精特新“小巨人”企业和第三批专精特新“小巨人”复核通过企业名单&#xff0c;其中&#xff0c;厦门攸信信息技术有限公司进入第六批专精特新“小巨人”企业培育。 “专精特新”企业是指具有…