【问题标题】:End of 2d array二维数组结束
【发布时间】:2009-11-18 08:56:50
【问题描述】:

java怎么说

如果我到达二维数组中一行的末尾,并且我在该行中只遇到了 0 将行设置为下一行(行 ++)并将列设置为 0(列 = 0)?

我的算法陷入无限循环时遇到问题:D

谢谢

【问题讨论】:

  • 发布您的代码以及您期望的示例输入和输出。
  • 几乎不可能不向您发送整个项目,包括存储在程序外部文件中的图形

标签: java debugging loops


【解决方案1】:

呃,听起来你想要一个基本的嵌套循环来遍历你的数组......

for(int i=0; i<rows.length; i++)
   for(int j=0; j<columns.length; j++)

无论如何,这都会重置您的列。如果你想做一些诡计多端的事情

int sum =0;
for(int i=0; i<rows.length; i++)
{
  sum+= rows[i];
  if(i == rows.length-1 && sum == 0)
  {
     i=i+1
  } 
   for(int j=0; j<columns.length; j++)
   {
     //whatever else you want here
   }
}

请注意,这在算法上似乎是最不寻常的情况...我希望您不要试图破解一个肮脏的错误,而不是弄清楚真正的问题是什么!

【讨论】:

  • 我有一个对称矩阵,当我在它的顶部循环时,我发现一个 >0 ,我从 matrix[x][y] 和 matrix[y][x] 中取出一个然后我将下一行设置为我所在的列,直到我的数组中没有值为止,问题是当我这样做时,我到达了一行没有 0 的地步,所以我需要说,如果我我在一行的末尾,没有0,从下一个重新开始
  • 那么你到底想做什么?如果您尝试在循环中动态调整 nxn 二维数组的大小,您可能会遇到麻烦。这听起来很深奥,但是如果您只是想同时将 [2][3] 和 [3][2] 中的值减少 1,而数组中仍有非零值,则可以简化逻辑对于那相当多。
  • 是的,这就是我想做的所有事情,它适用于更小的图表,我只是试图制作一个野兽,它卡在一个循环中:S
  • 这样的话,为什么不正常遍历数组,计算[x][y]和[y][x]的差值,存入第一个较大的那个地方?无论如何,这将是你重组的最终结果。如果您的最终目标是只有一个 0 的 nxn 数组,那么还有一种更简单的方法可以做到这一点...... :)
【解决方案2】:

此示例循环遍历数组,直到找到第一个非零值并将其与坐标一起输出。

int[][] x = new int[column][row];
boolean allzero = true;

for(int i=0;i<row;i++) {
  for(int j=0;j<column;j++) {
    allzero = (x[j][i]==0) && allzero;
    if(!allzero) {
      //what do we want to do when we encounter a non zero value?
      System.out.println("Found "+x[j][i]+" at row: "+i+" column: "+j);
      break;
    }
  }
  if(!allzero) {
    //what do we want to do when we encountered a non zero value?
    break;
  }
}

其实我不明白你的意思

将列设置为 0(列 = 0)

如果你只是想继续循环遍历数组,那么两个嵌套的 for 循环就像上面一样。一行完成(内循环)后,外循环递增一,内循环从零重新开始。因此,所有行都从头到尾贯穿。

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多