栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java矩阵运行时错误

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java矩阵运行时错误

我用此矩阵尝试了您的方法:

int[][] matrix = {{1,2,3},       {2,3,4},       {3,4,5}};

我什么也没得到

ArrayIndexOutOfBoundsException
。您的代码似乎没有引发任何错误。

但是,我注意到输出不符合预期。它给我的输出是

12345432
(只有8个数字),缺少
3
矩阵中间的数字。

仔细查看您的代码后,我发现错误出在

if(izquierda >= derecha)
。如果将其更改为
if(izquierda >derecha)
,则不会错过
3
。出于同样的原因,您还需要检查
arriba > abajo
,否则您的程序不适用于列多于行的任何矩阵。

编辑: 每个for循环后都需要这些检查。

我建议您将

return retorno;
while循环移到外部,然后插入
break
检查中:

public List<Integer> spiralOrder(int[][] matrix) {    if(matrix == null || (matrix.length == 0))        return new ArrayList<Integer>();    int arriba = 0;    int derecha = matrix[0].length - 1;    int abajo = matrix.length - 1;    int izquierda = 0;    List<Integer> retorno = new ArrayList<Integer>();    while(true)    {        for(int i = izquierda; i <= derecha; i++) retorno.add(matrix[arriba][i]);        arriba++;        if(arriba > abajo) break;        for(int i = arriba; i <= abajo; i++)  retorno.add(matrix[i][derecha]);        derecha--;        if(izquierda > derecha) break;        for(int i = derecha; i >= izquierda; i--) retorno.add(matrix[abajo][i]);        abajo--;        if(arriba > abajo) break;        for(int i = abajo; i >= arriba; i--) retorno.add(matrix[i][izquierda]);        izquierda++;        if(izquierda > derecha) break;    }    return retorno;}

代码说明(应要求提供):
假设您有一个矩阵,四个矩阵围在矩阵周围,每个人都在一侧。这四名个人被称为

arriba
derecha
abajo
,和
izquierda

arriba          1 2 3 4 5izquierda 2 3 4 5 6 derecha          3 4 5 6 7 abajo

这四个人可以看到前面的数字行:

  • arriba
    看到
    1 2 3 4 5
  • derecha
    看到
    5 6 7
  • abajo
    看到
    3 4 5 6 7
  • izquierda
    看到
    1 2 3

只要将这些人前面的所有数字都添加到列表中

retorno
,他们就会向前跳一步。例如,在第一个for循环之后,它看起来像这样:

          1 2 3 4 5arribaizquierda 2 3 4 5 6 derecha          3 4 5 6 7 abajo

在while循环的整个第一次迭代之后,它们的样子如下:

12 3 4         5arriba2 izquierda 3 4 5 derecha 6 abajo34 5 6         7
  • arriba
    正在向下移动。
  • derecha
    向左移动。
  • abajo
    正在向上移动。
  • izquierda
    向右移动。

一旦这两个人中的 任何 一个经过彼此,您就会知道他们之间没有数字,因此您需要 立即 停止循环。这就是为什么您需要检查两个人是否每次 经过某个步骤
都经过对方(每个for循环之后)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号