稀疏数组Java练习代码含IO

是在学习尚硅谷的数据结构与算法Java课程,课后自己凭借思路写的练习代码
首先定义一个稀疏数组类

import java.io.*;
import java.util.Objects;public class SparseArray {int sum;//创建原始数组public int[][] createArray(int column, int row){//根据传入数据定义原始数组大小int[][] array = new int[row][column];//设置一些初始值int position1_row = 1;int position1_column = 2;int position1_value = 1;int position2_row = 3;int position2_column = 4;int position2_value = 2;//赋值初始值,默认值为0, 1表示数据1,2表示数据2System.out.println("生成初始数组如下:");for (int i = 0; i < array.length; i++) {for (int j = 0; j < column; j++) {if (i == position1_row && j == position1_column){array[i][j] = position1_value;}else if (i == position2_row && j == position2_column){array[i][j] = position2_value;}else {array[i][j] = 0;}System.out.printf("%d\t",array[i][j]);}System.out.println();}return array;}//根据原始数组创建稀疏数组public int[][] builtSparseArray(int[][] originalArray){int row = originalArray.length;int column = originalArray[0].length;int sum = 0;for (int i = 0; i < row; i++) {for (int data : originalArray[i]) {if (data != 0){sum++;}}}int[][] sparseArray = new int[sum+1][3];sparseArray[0][0] = row;sparseArray[0][1] = column;sparseArray[0][2] = sum;int count = 1;System.out.println("生成稀疏数组如下");System.out.printf("%d\t%d\t%d\t\n",row,column,sum);for (int i = 0; i < row; i++) {for (int j = 0; j < column; j++) {if (originalArray[i][j] != 0){sparseArray[count][0] = i;sparseArray[count][1] = j;sparseArray[count][2] = originalArray[i][j];System.out.printf("%d\t%d\t%d\t\n",i,j,originalArray[i][j]);count++;}}}return sparseArray;}//根据稀疏数组恢复原始数组public int[][] restoreArray(int[][] sparseArray){int[][] restoredArray = new int[sparseArray[0][0]][sparseArray[0][1]];for (int i = 0; i < sparseArray[0][0]; i++) {for (int j = 0; j < sparseArray[0][1]; j++) {restoredArray[i][j] = 0;}}for(int i = 1; i < sparseArray.length; i++){restoredArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}System.out.println("复原数组如下:");for (int i = 0; i < sparseArray[0][0]; i++) {for (int j = 0; j < sparseArray[0][1]; j++) {System.out.printf("%d\t",restoredArray[i][j]);}System.out.println();}return restoredArray;}public void saveArray(int[][] array) {BufferedWriter writer = null;try {writer = new BufferedWriter(new FileWriter("sparseArray.txt"));for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[0].length; j++) {int data = array[i][j];writer.write(data+",");}writer.newLine();}writer.close();System.out.println("稀疏数组保存成功");} catch (IOException e) {e.printStackTrace();}}public int[][] readArray(){int [][] sparseArray = null;try {String data;BufferedReader reader = new BufferedReader(new FileReader("sparseArray.txt"));boolean flag = true;int count = 0;System.out.println("读到的稀疏数组如下:");while ((data = reader.readLine()) != null){String[] splits = data.split(",");if (flag){sum = Integer.parseInt(splits[2]);sparseArray = new int[sum+1][3];}flag = false;sparseArray[count][0] = Integer.parseInt(splits[0]);sparseArray[count][1] = Integer.parseInt(splits[1]);sparseArray[count][2] = Integer.parseInt(splits[2]);System.out.printf("%d\t%d\t%d\t\n",sparseArray[count][0],sparseArray[count][1],sparseArray[count][2]);count++;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return (Objects.isNull(sparseArray))?null:sparseArray;}
}

然后主类代码


public class Start {public static void main(String[] args) {//定义稀疏数组类对象SparseArray sparseArray = new SparseArray();//创建原始数组int[][] array = sparseArray.createArray(11, 11);//创建稀疏数组int[][] sparseArrayInstance = sparseArray.builtSparseArray(array);//保存稀疏数组sparseArray.saveArray(sparseArrayInstance);//读取稀疏数组int[][] ints = sparseArray.readArray();//恢复原始数组sparseArray.restoreArray(sparseArrayInstance);}
}

打印结果,存储是存到txt文件中

生成初始数组如下:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	2	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
生成稀疏数组如下
11	11	2	
1	2	1	
3	4	2	
稀疏数组保存成功
读到的稀疏数组如下:
11	11	2	
1	2	1	
3	4	2	
复原数组如下:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	2	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	Process finished with exit code 0

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

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

相关文章

雨量气象站:野外监测的得力助手

在广阔无垠的大自然中&#xff0c;雨量、风力、风向、温湿度以及大气压力等气象数据对于各种应用场景都至关重要。特别是在野外、森林防火、山洪监测等无市电供电的场合&#xff0c;一款高效可靠的监测设备更是不可或缺。雨量气象站正是为了满足这些需求而诞生的户外专用监测站…

C++ STL unique_ptr智能指针源码剖析

由于上一篇博客将shared_ptr,weak_ptr,enable_shared_form_this的源码实现整理了一遍,想着cpp智能指针还差个unique_ptr故写下此篇博客,以供学习 源码剖析 一,模板参数 首先,我们先看unique_ptr的模板参数,第一个参数_TP自是不用说表示对象类型,第二个模板参数定义了unique_p…

FFmpeg视频处理工具安装使用

一、前言 FFmpeg是流行的开源视频处理工具&#xff0c;用于转码、合并、编辑等。以下是安装和使用方法&#xff1a; 二、步骤 1.下载 1.1 ffmpeg下载 官网下载地址 wget https://www.ffmpeg.org/releases/ffmpeg-6.1.1.tar.xz1.2 nasm下载 https://www.nasm.us/pub/nasm/…

Android应用安装过程

Android 系统源码源码-应用安装过程 Android 中应用安装的过程就是解析 AndroidManifest.xml 的过程&#xff0c;系统可以从 Manifest 中得到应用程序的相关信息&#xff0c;比如 Activity、Service、Broadcast Receiver 和 ContentProvider 等。这些工作都是由 PackageManage…

drm core

drm core初始化 /*** drm_sysfs_init - initialize sysfs helpers** This is used to create the DRM class, which is the implicit parent of any* other top-level DRM sysfs objects.** You must call drm_sysfs_destroy() to release the allocated resources.** Return: …

Linux通配符及其在文件搜索和管理中的应用

Linux通配符及其在文件搜索和管理中的应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 了解Linux通配符 在Linux系统中&#xff0c;通配符是一种用于匹…

家政小程序的开发,带动市场快速发展,提高家政服务质量

当下生活水平逐渐提高&#xff0c;也增加了年轻人的工作压力&#xff0c;同时老龄化也在日益增加&#xff0c;使得大众对家政的需求日益提高&#xff0c;能力、服务质量高的家政人员能够有效提高大众的生活幸福指数。 但是&#xff0c;传统的家政服务模式存在着效率低、用户与…

慧翰股份毛利率下滑:股权转让纠纷引关注,研发费用率远弱同行还买楼?

《港湾商业观察》施子夫 6月11日&#xff0c;慧翰微电子股份有限公司&#xff08;以下简称&#xff0c;慧翰股份&#xff09;IPO注册申请获证监会同意&#xff0c;预计公司将很快登陆深交所创业板&#xff0c;保荐机构为广发证券。 从业绩面来看&#xff0c;过去三年&#xf…

基于X86+FPGA+AI的芯片缺陷检测方案

应用场景 随着半导体技术的发展&#xff0c;对芯片的良率要求越来越高。然而集成电路芯片制造工艺复杂&#xff0c;其制造过程中往往产生很多缺陷&#xff0c;因此缺陷检测是集成电路制造过程中的必备工艺。 客户需求 小体积&#xff0c;低功耗 2 x USB,1 x LAN Core-i平台无…

JavaScript——运算符的优先级和结合性

目录 任务描述 相关知识 运算符的优先级 运算符的结合性 编程要求 任务描述 本关任务&#xff1a;我们将给出函数mainJs()的完整代码&#xff0c;要求在函数体内第三句以及第五句中添加适当的括号&#xff0c;实现编程要求里面的要求。 要想完成本关任务&#xff0c;必须…

一点连接千家银行,YonSuite让“银企对账”一键确认

在当今数智化浪潮下&#xff0c;成长型企业面临着前所未有的机遇与挑战。特别是在与银行的对接以及银企对账等方面&#xff0c;传统的手动操作模式已难以满足企业高效、安全的金融管理需求。用友YonSuite作为一款全场景SaaS应用服务&#xff0c;凭借其强大的银企直联功能&#…

AI在线免费视频工具3:声音生视频

1、声音生视频 Noisee&#xff1a;通过声音生成对应视频&#xff0c;可以增加prompt指定生成内容相关视频 https://noisee.ai/create

【基础篇】第5章 Elasticsearch 数据聚合与分析

在Elasticsearch的庞大功能体系中&#xff0c;数据聚合与分析扮演着至关重要的角色&#xff0c;它使我们能够从海量数据中提炼出有价值的信息&#xff0c;为决策提供依据。本章将深入探讨Elasticsearch的聚合功能&#xff0c;从基本概念到常见类型的实践&#xff0c;让你掌握如…

Elasticsearch 使用误区之二——频繁更新文档

在使用 Elasticsearch 时&#xff0c;频繁更新文档是一种常见误区。这不仅影响性能&#xff0c;还可能导致系统资源的浪费。 理解 Elasticsearch 的文档更新机制对于优化性能至关重要。 关于 Elasticsearch 更新操作&#xff0c;常见问题如下&#xff1a; ——https://t.zsxq.c…

Spring Cloud实战:构建分布式系统解决方案

Spring Cloud实战&#xff1a;构建分布式系统解决方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何使用Spring Cloud来构建分布式系统…

剖析DeFi交易产品之UniswapV4:概述篇

本文首发于公众号&#xff1a;Keegan小钢 UniswapV4 与 UniswapV3 相比&#xff0c;算法上并没有什么改变&#xff0c;依然还是采用集中流动性模型&#xff0c;但架构上变化很大&#xff0c;包括功能架构&#xff0c;也包括技术架构。相比之前的版本&#xff0c;UniswapV4 最大…

百元蓝牙耳机推荐2024,百元蓝牙耳机排行榜盘点

在2024年面对琳琅满目的蓝牙耳机选项&#xff0c;消费者往往难以抉择&#xff0c;特别是在预算有限的情况下&#xff0c;如何在众多产品中挑选出既满足质量又符合预算的耳机成为了一个不小的挑战。 为了帮助大家在繁多的选择中找到真正物有所值的百元蓝牙耳机&#xff0c;我们…

UnityUGUI之一:image和Rawimage

image组件的相关属性 其中SpriteMode&#xff0c;若为单个图片则为Single&#xff0c;图片集则为Multiple 图集的切割 点击Slice可以进行自动切割 为且每个格子都可以进行单独的九宫格切割 当图片被九宫格切割再进行拉伸以后&#xff0c;九宫格的四角不会被拉伸 Tiled&#x…

构建支持多平台的返利App跨平台开发策略

构建支持多平台的返利App跨平台开发策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将讨论如何构建支持多平台的返利App&#xff0c;特别关注跨平台…

一棵B+树可以存放多少行数据

以MySQL InnoDB为例。InnoDB存储引擎最小储存单元是页&#xff0c;一页大小固定是16KB&#xff0c;使用该引擎的表为索引组织表。B树叶子存的是数据&#xff0c;内部节点存的是键值和指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中&#xff0c;进而再去…