课时69:案例分析四(数组操作)

简介: 课时69:案例分析四(数组操作)本课介绍了如何创建一个整型数组操作类(Array),并在此基础上派生出排序子类(SortArray)和反转子类(ReverseArray)。主要内容包括:1. **数组操作定义**:实现基本的数组操作类,支持数据增加、容量扩充及获取数组内容。当数组满时无法继续增加元素。2. **排序子类**:通过继承父类,实现数组排序功能,并返回排序后的结果。3. **反转子类**:同样继承父类,实现数组内容的首尾交换。通过逐步扩展父类功能,最终实现了对数组的多种操作。

课时69:案例分析四(数组操作)

01. 数组操作定义

 

建立一个可以实现整型数组的操作类(Aray),而后在里面可以操作的数组的大小由外部来决定,而后在 Amay 类里面需要提供有数组的如下处理:进行数据的增加(如果数据满了则无法增加)、可以实现数组的容量扩充、取得数组全部内容。


完成之后在此基础上再派生出两个子类:

(1) 数组排序类:返回的数据必须是排序后的结果

(2) 数组反转类:可以实现内容的首尾交换。

 

02. 数组操作步骤

 

对于本程序而言首先要考虑的一定都是父类如何定义完善。

第一步:实现基本的数组操作类定义

第二步:进行排序子类定义

第三步:定义反转子类

2.1 实现基本的数组操作类定义

class Array {  // 数组的操作类
private int  []  data  ; //整型数组
public Array(int len)  {
if (len > 0)  {
this. data = new int [len] ; //开辟数组
        } else {
           this. data =new int[1];//开辟一个空间
}
}

这里要求追加一个数据满了无法增加,无法增加的话可以在下面这样写:

public Boolean add(int num)  {    // 数据增加

数据增加的话,数组中的的数据是一块一块存的,所以整型数据下面需要一个角标控制,所以整型数据下应该如下列所示:

private int foot ;// 进行数组索引控制

这个地方写完之后,在数据增加下方接着写:

If (this. foot< this. data. length)  {  //有位置
this, data [this. foot ++] = this. data ;
return true ;
}
return false ;
}
public  int[] getData()  {
return this. data ;
}
}
public int[] getData ()  {
return this. data ;
}
}
public class JavaDemo {
public static void main(string args[ ])  {
Array arr =new Array(5);
System.out.println(arr.add(10));
System.out.println(arr.add(5));
System.out.println(arr.add(20));
System.out.println(arr.add(3));
System.out.println(arr.add(6));
System.out.println(arr.add(1));

现在编译代码,发现有一处错误,这时将

this, data [this. foot ++] = this. data ;

改成

this, data [this. foot ++] =num ;

此时再将代码编译执行,如图:

image.png

除此之外,案例上说可以实现数组的容量扩充,那么在this. data =new int[1];后面继续编写:

public void increment(int num)  {  //实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小。

因为数组的最大特征在于长度是固定的,这也是数组的最大缺陷所在,所以要想扩充,只能再产生个new数组,如下:

int newData []= new int [this.data.length + num];

这里需要把原始数组进行拷贝,如下:

 System. arraycopy (this.data,0,newData,0,this.data.length);

this. data=newData ;//改变数组引用

再将上列数组扩充一个三,如下:

System.out.println(arr.add(10));
System.out.println(arr.add(5));
System.out.println(arr.add(20));
System.out.println(arr.add(3));
System.out.println(arr.add(6));
arr.increment(3);
System.out.println(arr.add(1));

再将代码进行编译,如图所示:

image.png

到这里,一个数组位就正常完成了。

2.2 进行排序子类定义

定义排序子类;

排序子类在原数组上继续添加代码如下:

class SortArray extends Array {  //定义排序子类

构造方法需要明确有参构造,这里需继续跟上

public SortArray(int len)  {
super(len);
}
public int[] getData( ) { //获得排序结果
java.util. Arrays.sort(super.getData()) ; //排序
return super.getData();

现在遵循的是父类中的方法要求,所以只需要在上方数组代码中改位即可,如下所示:

  Array arr =new Array(5);

改为SortArray arr=new SortArray(5)

System.out.println(arr.add(10));
System.out.println(arr.add(5));
System.out.println(arr.add(20));
System.out.println(arr.add(3));
System.out.println(arr.add(6));
arr.increment(3);
System.out.println(arr.add(1));
System.out.println(arr.add(7));
System.out.println(arr.add(0));
int result []= arr.getData();
for (int temp :result) {
System.out.print(temp+”、”);
}

再一次进行编译执行,如图:

image.png

2.3 定义反转子类

整个代码现在的操作就是以父类为标准,在整个定义的时候,子类中父类有什么方法就继续什么方法。

class ReverseArray extends Array  {  //定义反转子类
public ReverseArray (int len)  {
super(len);
  }
  public int[] getData()  {   //获得排序结果
int center=super.getData().length/2;
int head=0;
int tail=super.getDat().length-1;
for(int x=0;x<center ;x++)  {
int temp= super.getData()[head]
super.getData()[head]=super.getData()[tail]
super.getData()[tai1]=temp
head ++
tail--
}
return super.getData();

再将数组子类更改,如下所示:

SortArray arr=new SortArray(5)

改为ReverseArray arr=new ReverseArray(5);

然后再次编译执行,如下图:

image.png

父类之中定义的方法名称往往都很重要,如果功能相同的时候子类应该以覆写父类的方法为优先考虑。

相关文章
|
存储 SQL 算法
Mysql进阶索引篇02——InnoDB存储引擎的数据存储结构(一)
前面我们已经剖析了mysql中InnoDB与MyISAM索引的数据结构,了解了B+树的设计思想、原理,并且介绍了B+树与Hash结构、平衡二叉树、AVL树、B树等的区别和实际应用场景。 页和页之间并不一定在物理上相连,只是在逻辑上使用双向链表关联。指针、记录究竟是如何存储的呢?其实这就需要联系我们之前提到的行格式了。数据查找在页目录中二分法快速定位到槽,上面的过程都与页的内部结构相关,本文将详细的阐述。
Mysql进阶索引篇02——InnoDB存储引擎的数据存储结构(一)
|
SQL 分布式计算 MaxCompute
MaxCompute SQL使用小技巧之多列转多行
上一篇分析了常用的行列转换,在这里补充一点使用posexplode函数进行多列转多行
1132 0
|
8月前
|
传感器 机器学习/深度学习 人工智能
2025年4月十大局域网监控系统厂商深度盘点
随着混合云、边缘计算和物联网的深度融合,智能化网络管理成为企业数字化转型的关键。本文剖析2025年十大头部厂商,涵盖功能创新与场景适配。例如,ManageEngine OpManager通过AI实现主动运维,提升网络可用性;SolarWinds提供可视化性能分析;Zabbix以开源生态支持大规模监控。同时,国产厂商如中科网威在信创领域实现突破。未来,网络监控将融合AIOps与SecOps,迈向超高速时代,助力企业构建智能网络中枢。选型时需结合网络规模、合规需求及全球化程度综合评估。
325 9
|
10月前
|
算法 图形学 数据安全/隐私保护
基于NURBS曲线的数据拟合算法matlab仿真
本程序基于NURBS曲线实现数据拟合,适用于计算机图形学、CAD/CAM等领域。通过控制顶点和权重,精确表示复杂形状,特别适合真实对象建模和数据点光滑拟合。程序在MATLAB2022A上运行,展示了T1至T7的测试结果,无水印输出。核心算法采用梯度下降等优化技术调整参数,最小化误差函数E,确保迭代收敛,提供高质量的拟合效果。
|
分布式计算 JavaScript 前端开发
JavaScript:轻松创建二维数组的多种方法
本文探讨了如何使用 JavaScript 生成二维数组的多种方法,揭示了这些方法在编程中的灵活应用。文章首先通过介绍如何创建一维数组,为理解二维数组的生成奠定基础。接着,分析了几种常见的生成二维数组的方法,包括使用嵌套循环、Array.from()、Array.fill() 以及 展开运算符 和 map() 等技巧。每种方法都有其优缺点,开发者可以根据场景选择最合适的方案。
501 0
|
Java 数据库
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
这篇文章讲述了作者在使用SpringBoot和Mybatis-plus时遇到的一个数据库字段映射问题,即SQLSyntaxErrorException错误,原因是实体类字段和数据库字段不匹配。文章提供了两种解决方法:一是关闭自动驼峰命名转换配置,二是修改数据库字段以匹配实体类字段,最终成功解决了问题。
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
|
网络协议 Docker 容器
登录私有镜像仓库报错:Error response from daemon: Get https://dockerhub.thecloud.ink/v2/: dial tcp: lookup dock
登录私有镜像仓库报错:Error response from daemon: Get https://dockerhub.thecloud.ink/v2/: dial tcp: lookup dock
758 0
|
算法 安全 开发者
Copilot使用技巧
Copilot使用技巧
427 1
Copilot使用技巧
|
缓存 前端开发 JavaScript
网页布局中,如何增加页面加载速度?
## 提升网页加载速度的关键策略 网页加载速度对用户体验和网站性能至关重要。本文介绍六种优化方法:优化图片与媒体文件(如使用WebP格式和懒加载),精简代码并压缩CSS/JavaScript,利用CDN加速;减少HTTP请求,如合并文件和使用CSS Sprites;合理配置浏览器缓存;优化服务器响应,选择高性能服务器并使用Gzip压缩;谨慎管理外部资源,考虑异步加载。根据网站具体情况调整这些策略,可显著提升加载速度。
|
Rust 开发者
Rust函数入门与函数重载
Rust函数入门与函数重载
312 0

热门文章

最新文章