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

news2024/11/23 16:52:12

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.coloradmin.cn/o/2194544.html

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

相关文章

【英语】5. 作文的高级表达

文章目录 前言一、作用二、主干内容三、使用步骤总结参考文献 前言 高中时总结的[1]&#xff0c;现在接着用 一、作用 在各种考试的作文中使用&#xff0c;减少过于直白、没有 “文采” 的表达 二、主干内容 file:///C/Users/[username]/Desktop/Engs.txt[2023/6/15 23:47:4…

一些关于PID双闭环控制的思考

最近搭建了一个LCL型滤波器的三相逆变器&#xff0c;使用了双闭环控制&#xff0c;但是查到了几种不同的控制策略&#xff0c;比如外环可以是输出电压&#xff0c;也可以是输出电流&#xff0c;内环可以是三相桥侧电感&#xff0c;也可以是电容电流&#xff0c;而不管哪种内外环…

利士策分享,旅游是否要舟车劳顿才能尽兴?

利士策分享&#xff0c;旅游是否要舟车劳顿才能尽兴&#xff1f; 国庆假期&#xff0c;当夜幕降临&#xff0c;城市灯火阑珊&#xff0c;一场关于美食与等待的较量悄然上演。 李女士在北京天坛公园附近餐厅的等位经历——前方1053桌的壮观景象&#xff0c;不仅让人咋舌&#xf…

OpenAI预计明年将推出“代理”系统

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Kubernetes系列之一快速部署一套K8s集群(kubeadm方式)

最近本人在重温云原生相关的技术&#xff0c;说到云原生&#xff0c;必然绕不开Kubernetes&#xff0c;今天想跟大家聊的就是大名顶顶的Kubernetes。相信很多朋友在学习和使用Kubernetes的过程遇到各式各样不同的问题。我将从一个初学者的角度来给大家讲解一下Kubernete从安装、…

1006每日一题

2 https://leetcode.cn/problems/maximize-the-topmost-element-after-k-moves/ 如果真的是堆的话&#xff0c;没有任何思路 如果是栈的话&#xff0c;先去找最大值所在的索引m&#xff0c;判断与k的关系 如果m>k&#xff0c;说明删k个也无法到当前的最大值或者到了也没法再…

分享7款AI学术论文生成器!一键实现论文生成器chat在线生成

在当今的学术研究和写作领域&#xff0c;AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是七款值得推荐的AI学术论文生成器&#xff0c;它们通过一键生成的方式&#xf…

2024年4款PDF编辑工具分享,一起来看看

在日常的工作和生活中&#xff0c;PDF文档可以说是无处不在。它们既方便又稳定&#xff0c;但有时候&#xff0c;我们总需要对这些PDF文档进行一些修改或编辑。今天&#xff0c;我就从一个普通人的角度&#xff0c;来聊聊我用过的几款PDF编辑器在编辑PDF文档时的表现如何。 一、…

python写的window小工具-一键设置ip自动获取ip

最近有个需求,笔记本在公司上网需要设置固定ip&#xff0c;拿回家之后又要设置自动获取ip&#xff0c;有些美女同事根本就不知道怎么设置&#xff0c;所以我打算开发一个一键设置的小软件供大家使用。 但是不会c&#xff0c;也不会c#&#xff0c;更加不会vb&#xff0c;不可能…

东方仙盟——软件终端架构思维———未来之窗行业应用跨平台架构

一、创生.前世今生 在当今的数字化时代&#xff0c;我们的服务覆盖全球&#xff0c;拥有数亿客户。然而&#xff0c;这庞大的用户规模也带来了巨大的挑战。安全问题至关重要&#xff0c;任何一处的漏洞都可能引发严重的数据泄露危机。网络带宽时刻面临考验&#xff0c;稍有不足…

产品经理内容分享:产品经理必背面试题(一)

目录 1、互联网领域你最崇拜的人是谁?为什么? 2、公司会有多个产品经理&#xff0c;请问你们的分工是怎样的&#xff1f; 3、举例分析你知道的几种商业模式? 4、一份PRD文档通常应包含什么内容? 5、请你说一下产品的需求来源有哪些&#xff1f; 6、产品经理如何进行商…

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

文章目录 262. 回顾上一章内容263. IDEA介绍263.1 IDEA 介绍263.2 Eclipse 介绍 264. IDEA下载265. IDEA使用1257. IDEA使用2268. IDEA使用3268. 269. 270. IDEA快捷键1,2,3271. IDEA模板 262. 回顾上一章内容 看视频 263. IDEA介绍 263.1 IDEA 介绍 IDEA 全称 IntelliJ ID…

台湾高雄三维倾斜摄影模型3DTiles样例数据介绍

台湾一直是国内研究的重点方向&#xff0c;最主要的原因是祖国统一大业尚未完成&#xff0c;加上当前国际局势比较复杂&#xff0c;台湾及周边有众多不稳定因素&#xff0c;美国、日本等国家与台湾地区当局一直保持着紧密关系&#xff0c;成为祖国统一进程的一大阻碍。在国内众…

LSTM模型实现电力数据预测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色&a…

【c语言——指针详解(4)】

文章目录 一、回调函数是什么&#xff1f;二、qsort的使⽤1、使⽤qsort函数排序整型数据2、使⽤qsort排序结构数据 三、qsort函数的模拟实现 作者主页 一、回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xf…

旅游管理自动化:SpringBoot系统设计与实现

第二章 相关技术简介 2.1 JAVA技术 本次系统开发采用的是面向对象的Java作为软件编程语言&#xff0c;Java表面上很像C&#xff0c;但是Java仅仅是继承了C的某些优点&#xff0c;程序员很少使用的C语言的特征在Java设计中去掉了。Java编程语言并没有什么结构&#xff0c;它把数…

HLS协议

HTTP Live Streaming&#xff08;缩写是 HLS&#xff09;是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载&#xff0c;每次只下载一些。当媒体流正在播放时&#xff0c;客户端可以选择从许多不同的备用源中…

自然语言处理:第五十一章 LangChain面经

写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 一. 什么是 LangChain…

JTAG在Chiplet测试中的应用

JTAG&#xff08;Joint Test Action Group&#xff09;在Chiplet&#xff08;芯粒&#xff09;测试中扮演着重要角色。Chiplet是一种具有特定功能的模块化小芯片&#xff0c;它们可以混合搭配成一个完整的系统&#xff0c;如CPU或GPU。随着Chiplet市场的快速发展&#xff0c;JT…

Linux 缓冲区

概念 用于临时存储数据的内存区域&#xff0c;目的是优化设备 I/O 操作&#xff0c;以提高传输效率 刷新方式 无缓冲(立即刷新)&#xff1a;write行缓冲(行刷新)&#xff1a;显示器文件全缓冲(缓冲区满刷新)&#xff1a;磁盘文件 刷新策略 强制刷新(fflush)进程退出的时候…