Java矩阵运行时错误

Java矩阵运行时错误,第1张

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循环之后)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5017033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存