JAVA编程题-求矩阵螺旋值

螺旋类

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.mzph.cn/news/100388.shtml

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

相关文章

Docker---cgroups资源限制

目录 一、cpu资源控制 1、 设置cpu使用率上限 2、设置cpu资源占用比&#xff08;设置多个容器时才有效&#xff09; 3、设置容器绑定指定的CPU 三、内存资源控制 四、磁盘IO配额控制 1、限制Block IO 2、限制bps和iops进行限制 一、cpu资源控制 cgroups是一个非常强大的…

【TypeScript】阮一峰TypeScript教程笔记:基本用法、any 类型等、类型系统

是阮一峰 TypeScript 教程的笔记。笔记目录与教程目录一致。笔记不全&#xff0c;仅作自己学习使用&#xff0c;完整学习请看&#xff1a;阮一峰 TypeScript 教程或TypeScript官方文档。 文章目录 简介基本用法any 类型&#xff0c;unknown 类型&#xff0c;never 类型any 类型…

web基础以及http协议

web基础&#xff0c;http协议 域名&#xff1a;www.88886.co DNS解析 静态页面 动态页面 DNS域名&#xff1a; 网络上的通信都是基于IP通信模式&#xff1a;TCP/IP TCP建立连接和断开连接&#xff0c;都是要双方进行确认的 建立连接&#xff1a;三次握手 断开连接&#x…

Spring源码解析(十二):TransactionInterceptor事务拦截器

Spring源码系列文章 Spring源码解析(一)&#xff1a;环境搭建 Spring源码解析(二)&#xff1a;bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三)&#xff1a;bean容器的刷新 Spring源码解析(四)&#xff1a;单例bean的创建流程 Spring源码解析(五)&…

dockerfile lnmp 搭建wordpress、docker-compose搭建wordpress

-----------------安装 Docker--------------------------- 目前 Docker 只能支持 64 位系统。systemctl stop firewalld.service setenforce 0#安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 --------------------------------------------------…

NoSQL之Redis 主从复制配置详解及哨兵模式

目录 1 Redis 主从复制 1.1 主从复制的作用 1.2 主从复制流程 2 搭建Redis 主从复制 2.1 安装 Redis 2.2 修改 Redis 配置文件&#xff08;Master节点操作&#xff09; 2.3 修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.4 验证主从效果 3 Redis 哨兵模…

揭秘 Go 中的 new() 和 make() 函数

Go&#xff08;或 Golang&#xff09;是一种现代、静态类型、编译型的编程语言&#xff0c;专为构建可扩展、并发和高效的软件而设计。它提供了各种内置的函数和特性&#xff0c;帮助开发人员编写简洁高效的代码。其中包括 new() 和 make() 函数&#xff0c;这两个函数乍看起来…

一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)

Redis服务器是一个事件驱动程序&#xff0c;它主要处理两类事件&#xff1a;文件事件和时间事件。这些事件的处理和Redis命令的执行密切相关。下面我将以Redis服务端命令为切入点&#xff0c;深入解析其工作原理和重要性。 首先&#xff0c;我们先了解Redis服务端有哪些命令。…

【JavaScript】浅拷贝与深拷贝

引言 浅拷贝、深拷贝是对引用类型而言的。 引用类型的变量对应一个栈区地址&#xff0c;这个栈区地址处存储的值是存放的真正的数据的堆区地址。 基本数据类型的变量也对应一个栈区地址&#xff0c;但是该地址存储的是其真正的值。 let a b发生了什么&#xff1f; let obj…

this关键字在不同上下文中的值是如何确定的?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

vsftpd使用

安装vsftpd yum install vsftpd -y版本&#xff1a;3.0.2三种访问方式&#xff1a;匿名访问、本地用户访问、虚拟用户访问 虚拟用户访问配置 # 1. 配置虚拟用户 cd /etc/vsftpd mv vsftpd.conf vsftpd.conf.bak grep -v "#" vsftpd.conf.bak > vsftpd.conf ech…

利用互斥锁实现多个线程写一个文件

代码 #include <stdio.h> #include <pthread.h> #include <string.h> #include <unistd.h>FILE *fp;//线程函数1 void *wrfunc1(void *arg); //线程函数2 void *wrfunc2(void *arg); //线程函数3 void *wrfunc3(void *arg);//静态创建互斥锁 pthread_…

Python爬虫技术系列-03requests库案例-完善

Python爬虫技术系列-03requests库案例 参考1 Requests基本使用1.1 Requests库安装与使用1.1.1 Requests库安装1.1.2 Rrequests库介绍1.1.3 使用Requests一般分为三个步骤1.1.4 requests的公共方法 2 Requests库使用案例2.1 GET请求携带参数和headers2.2 POST请求&#xff0c;写…

(8)SpringMVC中的视图类型及其特点,以及视图控制器view-controller的配置

SpringMVC的视图 转发和重定向的区别及其原理,参考文章 视图类型及特点 视图的作用就是将Model中的数据渲染到页面上并展示给用户,SpringMVC中视图对应的View接口有三种实现类对应三种视图解析器 默认有转发视图InternalResourceView和重定向视图RedirectView以及Thymeleaf…

edu 156 div2 c

#include <bits/stdc.h> using namespace std; using ll long long; void solve(){string s;cin>>s;//s s;ll t;cin>>t;//t--;ll pos,k;ll len 0;for(int i 0 ; i < s.length() ; i){if(len s.length() - i > t){pos t - len;//第几个字符k i;…

【接口干货】热门、免费api集合

手机号码归属地&#xff1a;可根据手机号码查询其省市区、运营商区号行政区划代码等信息。 上亿条数据囊括最新的170、166、147等号段&#xff0c;更新及时、准确度高。 短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;…

Cpolar内网穿透工具在windows和Linux上具体使用

Cpolar内网穿透工具在windows和Linux上具体使用 一、Linux上部署的项目通过内网穿透实现外网访问项目二、Windows上部署的项目通过内网穿透实现外网访问项目 一、Linux上部署的项目通过内网穿透实现外网访问项目 一个免费的内网穿透方式&#xff0c;简单方便。 网址&#xff1a…

CCF中国开源大会专访|毛晓光:“联合”是开源走向“共赢”的必由之路

受访嘉宾 | 毛晓光 记者 | 朱珂欣 2023 CCF 中国开源大会&#xff08; CCF ChinaOSC &#xff09;拟于 2023 年 10 月 21 日至 22 日在湖南省长沙市北辰国际会议中心召开。 作为第二届 CCF 中国开源大会&#xff0c;本届大会将组织特邀报告、高峰论坛和领域分论坛等不同类…

智能电表怎么远程读数?

随着科技的飞速发展&#xff0c;智能电表已经成为了家庭用电管理的重要工具。相比传统的电表&#xff0c;智能电表具有远程读数、自动抄表、用电分析等功能&#xff0c;让家庭用电更加便捷、智能。那么&#xff0c;智能电表是如何实现远程读数的呢?下面小编来为大家讲解一下智…

JVM 运行时数据区和垃圾收集算法

在 《深入理解 Java 虚拟机》一书中&#xff0c;作者将运行时数据区和垃圾收集算法放在开头章节&#xff0c;说明了这两个知识点是进一步学习 JVM 的基础知识点&#xff0c;相比后续的 垃圾收集器和 JMM&#xff0c;它也更加的简单。 运行时数据区 运行时数据区是《Java 虚拟…