JAVA编程题-求矩阵螺旋值

news2024/11/18 5:58:02

螺旋类

package entity;
/**
 * 打印数组螺旋值类
 */
public class Spiral {
//	数组行
	private int row;
//	数组列
	private int col;
//	行列数
	private int size;
//	当前行索引
	private int rowIndex;
//	当前列索引
	private int colIndex;
//	行开始索引
	private int rowStart;
//	行结束索引
	private int rowEnd;
//	列开始索引
	private int colStart;
//	列结束索引
	private int colEnd;
//	数组
	private int[][] spiralArray;
//	保存数组
	private int[][] saveArray;
//	构造方法
	public Spiral(int row,int col,int[][] spiralArray) {
		this.row = row;
		this.col = col;
		this.rowStart = 0;
		this.rowEnd = row - 1;
		this.colStart = 0;
		this.colEnd = col - 1;
		this.size = row*col;
		this.spiralArray = spiralArray;
		this.saveArray = new int[row][col];
		for(int[] r : this.saveArray) {
			for(int i=0;i<r.length;i++) {
				r[i] = Integer.MIN_VALUE;
			}
		}
	}
//	打印螺旋值
	public void printSpiral() {
//		行列1时打印螺旋值
		if(this.row==1||this.col==1) {
			printArray();
			return;
		}
		while(size-->0) {
			printData();
			saveData();
			setRange();
			if(this.rowIndex==this.rowStart&&this.colIndex<this.colEnd) {
				toRight();
			}else if(this.rowIndex<this.rowEnd&&this.colIndex==this.colEnd) {
				toDown();
			}else if(this.rowIndex==this.rowEnd&&this.colIndex>this.colStart) {
				toLeft();
			}else if(this.rowIndex>this.rowStart&&this.colIndex==this.colStart) {
				toUp();
			}
		}
	}
//	设置行列开始结束值
	private void setRange() {
//		开始结束值的界分
		int rowDivide = this.row/2;
		int colDivide = this.col/2;
//		判断一行每个元素是否都走完
		for(int i=0;i<this.row;i++) {
			int colCount = 0;
			int[] r = this.saveArray[i];
			for(int j=0;j<this.col;j++) {
				int c = r[j];
				if(c!=Integer.MIN_VALUE) {
					++colCount;
				}
			}
			if(colCount==this.col) {
				if(i+1<rowDivide) this.rowStart = i + 1;
				if(i-1>=rowDivide) this.rowEnd = i - 1;
			}
		}
//		判断列元素是否走完
		for(int i=0;i<this.col;i++) {
			int rowCount = 0;
			for(int j=0;j<this.row;j++) {
				int data = this.saveArray[j][i];
				if(data!=Integer.MIN_VALUE) {
					++rowCount;
				}
			}
			if(rowCount==this.row) {
				if(i+1<colDivide) this.colStart = i + 1;
				if(i-1>=colDivide) this.colEnd = i - 1;
			}
		}
	}
	
	//	打印数组
	private void printArray() {
		for(int[] arr : this.spiralArray) {
			for(int data : arr) {
				System.out.print(data);
			}
		}
	}
//	打印元素
	private void printData() {
		System.out.print(this.spiralArray[this.rowIndex][this.colIndex]);
	}
//	向上移动
	private void toUp() {
		this.rowIndex = (this.rowIndex-1)>=0?--this.rowIndex:0;
	}
//	向下移动
	private void toDown() {
		this.rowIndex = (this.rowIndex+1)<this.row?++this.rowIndex:this.row-1;
	}
//	向左移动
	private void toLeft() {
		this.colIndex = (this.colIndex-1)>=0?--this.colIndex:0;
	}
//	向右移动
	private void toRight() {
		this.colIndex = (this.colIndex+1)<this.col?++this.colIndex:this.col-1;
	}
//	保存已经过数据
	private void saveData() {
		this.saveArray[this.rowIndex][this.colIndex] = this.spiralArray[this.rowIndex][this.colIndex];
	}
}

测试类

package test;

import java.util.Arrays;

import entity.Spiral;

public class SpiralTest {

	public static void main(String[] args) {
//		int row = 1;
//		int col = 1;
//		int[][] array = {{1}};
//		int row = 1;
//		int col = 2;
//		int[][] array = {{1,2}};
//		int row = 2;
//		int col = 1;
//		int[][] array = {{1},{2}};
		int row = 4;
		int col = 5;
		int[][] array = new int[row][col];
		for(int[] r : array) {
			for(int i=0;i<r.length;i++) {
				r[i] = (int)(Math.random()*100);
			}
		}
		System.out.println(Arrays.deepToString(array));
		Spiral sp = new Spiral(row,col,array);
		sp.printSpiral();
	}

}

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

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

相关文章

大模型部署手记(5)ChatGLM2+Jetson AGX Orin

1.简介&#xff1a; 组织机构&#xff1a;智谱/清华 代码仓&#xff1a;https://github.com/THUDM/ChatGLM2-6B 模型&#xff1a;THUDM/chatglm2-6b 下载&#xff1a;https://huggingface.co/THUDM/chatglm2-6b 镜像下载&#xff1a;https://aliendao.cn/models/THUDM/chat…

Java日期的学习篇

关于日期的学习 目录 关于日期的学习JDK8以前的APIDate Date常用APIDate的API应用 SimpleDateFormatSimpleDateFormat常用API测试 反向格式化(逆操作)测试 训练案例需求(秒杀活动)实现 Calendar需求痛点常见API应用测试 JDK8及以后的API(修改与新增)为啥学习(推荐使用)新增的AP…

ArcGIS Engine:鹰眼图的拓展功能-点击和矩形+坐标状态栏

目录 01 前言 02 鹰眼图的控制功能 03 显示当前鼠标的地理坐标 01 前言 说是拓展&#xff0c;不过是忘记了实验还有附加实验.这里补上. 前文不再赘述,上一节查看&#xff1a;ArcGIS Engine&#xff1a;视图菜单的创建和鹰眼图的实现_炒茄子的博客-CSDN博客 这里加上三个功能…

unity脚本_Vector3 c#

接下来学习 相对世界坐标 首先我们给场景物体一个空物体 修改新建空物体名字为GameObjectFather 修改GameObjectFather坐标 修改GameObject2坐标 然后将GameObjectFahter设置成GameObject2的父物体 我们观察到子物体的坐标改变了但是 运行显示的相对世界坐标this.transform.po…

R语言教程课后习题答案(持续更新中~~)

R语言教程网址如下 https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html 目录 source()函数可以运行保存在一个文本文件中的源程序 R向量下标和子集 数值型向量及其运算 日期功能 R因子类型 source()函数可以运行保存在一个文本文件中的源程序…

学信息系统项目管理师第4版系列18_采购管理

1. 协议 1.1. 合同 1.1.1. 国际合作的项目经理应牢记&#xff0c;无论合同规定如何详尽&#xff0c;文化和当地法律对合同及其可执行性均有影响 1.2. 服务水平协议&#xff08;SLA&#xff09; 1.3. 谅解备忘录 1.4. 协议备忘录&#xff08;MOA&#xff09; 1.5. 订购单 …

十天学完基础数据结构-第八天(哈希表(Hash Table))

哈希表的基本概念 哈希表是一种数据结构&#xff0c;用于存储键值对。它的核心思想是将键通过哈希函数转化为索引&#xff0c;然后将值存储在该索引位置的数据结构中。 哈希函数的作用 哈希函数是哈希表的关键部分。它将输入&#xff08;键&#xff09;映射到哈希表的索引位…

Python常用功能的标准代码

后台运行并保存log 1 2 3 4 5 6 7 8 9 nohup python -u test.py > test.log 2>&1 & #最后的&表示后台运行 #2 输出错误信息到提示符窗口 #1 表示输出信息到提示符窗口, 1前面的&注意添加, 否则还会创建一个名为1的文件 #最后会把日志文件输出到test.log文…

卷积神经网络-池化层和激活层

2.池化层 根据特征图上的局部统计信息进行下采样&#xff0c;在保留有用信息的同时减少特征图的大小。和卷积层不同的是&#xff0c;池化层不包含需要学习的参数。最大池化(max-pooling)在一个局部区域选最大值作为输出&#xff0c;而平均池化(average pooling)计算一个局部区…

卷积神经网络-卷积层

卷积神经网络 卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09;是一类包含卷积计算且具有深度结构的前馈神经网络&#xff0c;是深度学习的代表算法之一。卷积神经网络具有表征学习能力&#xff0c;能够按其阶层结构对输入信息进行平移不变分…

H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口

一款比较简单的 H5 移动端购物商城系统源码&#xff0c;比较适合单品商城、小型商城使用。带有易支付接口。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88391704 源码下载2&#xff1a;评论留言或私信留言

【Spring笔记03】Spring依赖注入各种数据类型

这篇文章&#xff0c;详细介绍一下Spring框架中如何注入各种数据类型&#xff0c;包含&#xff1a;注入基本数据类型、数组、集合、Map映射、Property属性、注入空字符串、注入null值、注入特殊字符等内容&#xff0c;以及如何使用命名空间进行依赖注入。 目录 一、注入各种数据…

云原生Kubernetes:简化K8S应用部署工具Helm

目录 一、理论 1.HELM 2.部署HELM2 3.部署HELM3 二、实验 1.部署 HELM2 2.部署HELM3 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错 6.git命令报错 7.CentOS 7 下git c…

互联网Java工程师面试题·Elasticsearch 篇·第一弹

目录 1、elasticsearch 了解多少&#xff0c;说说你们公司 es 的集群架构&#xff0c;索引数据大小&#xff0c;分片有多少&#xff0c;以及一些调优手段 。 1.1 设计阶段调优 1.2 写入调优 1.3 查询调优 1.4 其他调优 2、elasticsearch 的倒排索引是什么 3、elastic…

ToDoList使用自定义事件传值

MyTop与MyFooter与App之间传递数据涉及到的就是子给父传递数据&#xff0c;MyList和MyItem与App涉及到爷孙传递数据。 之前的MyTop是使用props接收App传值&#xff0c;然后再在methods里面调用&#xff0c;现在使用自定义事件来处理子组件和父组件之间传递数据。 图是之前的…

新款UI动态壁纸头像潮图小程序源码

新款UI动态壁纸头像潮图小程序源码&#xff0c;不需要域名服务器&#xff0c;直接添加合法域名&#xff0c;上传发布就能使用。 可以对接开通流量主&#xff0c;个人也能运营&#xff0c;不需要服务器源码完整。整合头像&#xff0c;动态壁纸&#xff0c;文案功能齐全。 源码…

代码随想录Day12 二叉树 LeetCode T102二叉树的层序遍历 T226 翻转二叉树 T101 对称二叉树

本文思路和详细讲解来自于:代码随想录 (programmercarl.com) LeetCode T102 二叉树的层序遍历 题目链接:102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 本题使用队列辅助完成,讲解主要函数CheckOrder:首先判断root是否为空,是就直接返回,然后创建…

芯驰D9评测(3)--建立开发环境

1. 建立交叉编译链接环境 官网下载的SDK包中就有交叉工具链&#xff0c;米尔提供的这个 SDK 中除了包含各种源代码外还提供了必要的交叉工具链&#xff0c;可以直接用于编译应用程序等。 用户可以直接使用次交叉编译工具链来建立一个独立的开发环境&#xff0c;可单独编译…

发光文字跟随鼠标

效果展示 CSS / JavaScript 知识点 background-image 绘制网格背景filter 属性的运用onmousemove 事件运用getBoundingClientRect 方法的运用 实现页面基础结构 <!-- 光标 --> <div class"cursour"></div>实现网格背景样式 body {min-height: …

如何用 Tana AI 一站式批量润色整理音频笔记?

&#xff08;注&#xff1a;本文为小报童精选文章&#xff0c;已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 用好 Tana AI Builder &#xff0c;充分体验和发挥 AI 工作流的强大性能。 痛点 作为一个足够懒惰的写作者&#xff0c;我对音频转文本这事儿…