顺时针旋转数组

2024-03-08

我有一个二维数组,需要顺时针旋转 90 度,但是我不断收到 arrayindexoutofbounds...

public int[][] rotateArray(int[][] arr) {
    // first change the dimensions vertical length
    // for horizontal length and vice versa
    int[][] newArray = new int[arr[0].length][arr.length];

    // invert values 90 degrees clockwise by starting
    // from button of array to top and from left to right
    int ii = 0;
    int jj = 0;
    for (int i = 0; i < arr[0].length; i++) {
        for (int j = arr.length - 1; j >= 0; j--) {
            newArray[ii][jj] = arr[i][j];
            jj++;
        }
        ii++;
    }
    return newArray;
}

这是一个标准矩阵顺时针旋转代码:

static int[][] rotateCW(int[][] mat) {
    final int M = mat.length;
    final int N = mat[0].length;
    int[][] ret = new int[N][M];
    for (int r = 0; r < M; r++) {
        for (int c = 0; c < N; c++) {
            ret[c][M-1-r] = mat[r][c];
        }
    }
    return ret;
}

请注意以下几点:

  • 它提高了引用尺寸的可读性MxN矩阵为M and N
  • 这是传统的使用方式r, c代替i, j索引矩阵的行和列
  • This is not the most robust implementation:
    • 并不能确保mat是一个有效的MxN矩阵,M>0, N>0
  • Use an explicit mapping formula instead of extraneous local variables
    • 使程序不那么复杂并且更具可读性

这是一个测试工具:

import java.util.Arrays;
//...

static void printMatrix(int[][] mat) {
    System.out.println("Matrix = ");
    for (int[] row : mat) {
        System.out.println(Arrays.toString(row));
    }
}
public static void main(String[] args){
    int[][] mat = {
        { 1, 2, 3 },
        { 4, 5, 6 }
    };
    printMatrix(mat);
    // Matrix = 
    // [1, 2, 3]
    // [4, 5, 6]

    int[][] matCW = rotateCW(mat);
    printMatrix(matCW);
    // Matrix = 
    // [4, 1]
    // [5, 2]
    // [6, 3]
}

注意使用for-each http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html循环和java.util.Arrays http://java.sun.com/javase/6/docs/api/java/util/Arrays.html in printMatrix。如果您经常在 Java 中使用数组,那么您绝对应该熟悉它们。

Java 矩阵库的链接

如果您经常使用矩阵,您可能需要考虑使用专门的矩阵库。

  • JAMA: http://math.nist.gov/javanumerics/jama/ http://math.nist.gov/javanumerics/jama/
  • UJMP: http://www.ujmp.org/ http://www.ujmp.org/

相关问题

从技术上讲,Java 有数组的数组。确保您了解所有含义。

  • 数组数组与多维数组的性能比较 https://stackoverflow.com/questions/2368761/performance-comparison-of-array-of-arrays-vs-multidimensional-arrays
  • Java Arrays.equals()回报false对于二维数组。 https://stackoverflow.com/questions/2721033/java-arrays-equals-returns-false-for-two-dimensional-arrays
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺时针旋转数组 的相关文章

  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 检测 Swing 中单击生成的 MouseEvent 上的 Shift 修饰符

    我正在使用 Java Swing 处理 GUI 应用程序中的一些 MouseEvent 从现在开始我正在分析 mousePressed 方法中的鼠标事件 只是为了确定是否 发生左键或右键单击 我的代码是 public void mouseP
  • React,未捕获的引用错误:ReactDOM 未定义

    我在做这个路由器教程 http www tutorialspoint com reactjs reactjs router htm 我的 App jsx 文件 import React from react import ReactDOM
  • int 和 char 数组有什么区别?

    下面 int 和 char 数组有什么区别 int main int numbers 2 1 3 char letter a b 0 cout lt lt numbers lt
  • C语言中的大整数?

    在 C 中处理大量数字的最简单方法是什么 我需要在区域中存储值1000 900 或者以更人类可读的形式10 2700 有谁知道一个简单的方法来做到这一点 任何帮助将不胜感激 Use libgmp http gmplib org GMP 是一
  • 从 ADO.NET 执行 T-Sql 视图

    是否可以从 C 代码执行视图 如果是的话我想知道参数化视图是否存在以及我应该如何使用它们 参数化意味着我们在存储过程中使用相同的参数来声明 where 条件 不执行视图 一个执行查询 如果查询从视图或表中选择行 ADO NET 不知道也不关
  • Ruby on Rails / Paperclip / AWS::S3::NoSuchBucket 错误

    我安装了回形针插件并能够在本地使用它 当我将其配置为与 amazon S3 一起使用时 我不断收到 NoSuchBucket 指定的存储桶不存在 错误 回形针文档指出 如果存储桶不存在 则会创建该存储桶 但很明显 我的情况出了问题 我首先安
  • Mysql中如何将数据合并到临时表中

    我有一张非常大的桌子 叫做paypal ipn orders 在这个表中 我有 2 个重要的信息 一行称为item name和一行称为sort num 我想使用某些参数从中提取记录paypal ipn orders并将它们放入一个名为的临时
  • MS Access SQL 中是否有与 SUBSTRING 函数等效的函数?

    我想在 MS Access 查询中执行类似的操作 但 SUBSTRING 是一个未定义的函数 SELECT DISTINCT SUBSTRING LastName 1 1 FROM Authors 您可以使用 VBA 字符串函数 正如 on
  • Django静态媒体不显示图片

    在寻找解决方案几个小时后未能解决我的问题后 我发布了此内容 我的媒体根目录中的图像没有显示在我的 html 上 在 chrome 的控制台中我得到一个404 file not found 尽管图像就在那里 我在 Pycharm 中使用 Py
  • Google 日历 feed timeMin timeMax 不起作用

    我从搜索中推断 限制日期范围的 Google 日历提要的 URI 应包括 timeMin 和 timeMax 还应包括 singleEvents 和 orderBy 这是我构建的 URI 无论我在投影值后放置什么查询参数 我仍然会获取从 8
  • 以编程方式使下载停靠栏图标弹起

    如何以编程方式使 Dock 下载 图标弹起 请注意 我不希望我的应用程序图标弹起 而只希望下载图标弹起 特别是 我正在将文件从我的应用程序下载到 下载 文件夹 这没问题 但我希望下载图标在下载完成时弹起 就像 Safari 完成下载时发生的
  • 通过右值引用返回是否更有效?

    例如 Beta ab Beta toAB const return move Beta ab 1 1 Beta ab Beta toAB const return move Beta ab 1 1 这会返回一个悬空引用 就像左值引用的情况一
  • 多个鼠标/鼠标/光标?

    如何为多个鼠标显示另一个光标 我有两个 TMemo 两个可以输入各自 TMemo 的键盘 2 个鼠标 我需要 2 个光标 如果假设的话 我已经可以检测出哪只老鼠是哪只 我怎样才能让我自己的光标跟着它一起走 使用德尔福 可能沿着多点 http
  • 使用 bootstrap-datepicker 禁用日期范围?

    如何禁用多个日期范围 使用bootstrap datepicker 目前 这是我关于如何专门禁用日期的代码 div class input group input daterange div
  • Linux shell 编程字符串比较语法

    有什么区别 and 在Linux shell编程中比较字符串 也许下面的代码可以工作 if NAME user then echo your name is user fi 但我认为这不是正确的语法 它将用于比较字符串 陈述 什么是正确的
  • webpack --env.product 和 --mode="product" 之间有什么区别

    如果我错了 请纠正我 但据我从文档中了解到 env option https webpack js org guides environment variables 用来ONLY为了能够在webpack config js如果它导出一个函数
  • 插入表视图并添加按钮或空行时最好的是什么?

    当呈现一个简单的表格视图 或者我想甚至是列表视图 时 您输入新数据的首选方法是什么 With add delete buttons like this Or with a blank line indicating a new record
  • UIAlertViewDelegate 方法 didDismissWithButtonIndex 在手机睡眠/锁定时被调用

    我有一个 UIAlertView 它的 didDismissWithButtonIndex 委托方法调用会弹出视图控制器 同一类 它是 AlertView 委托和视图控制器 以使用户返回到上一个屏幕 问题是 当您在 警报显示 之前锁定手机时
  • Docker 化 Spring boot 应用程序以进行 Kubernetes 部署

    我有一个 Spring Boot 应用程序 在我的 application properties 中具有如下一些属性 server ssl keyStore users admin certs appcert jks server ssl
  • 顺时针旋转数组

    我有一个二维数组 需要顺时针旋转 90 度 但是我不断收到 arrayindexoutofbounds public int rotateArray int arr first change the dimensions vertical