0

我真的是java新手,我已经用谷歌搜索了我知道的每一个可能的短语。

所以我有一个由 36 行和 12 列组成的表,我一直在尝试编写一个方法,当它变满时删除一行,然后将所有内容向下移动,我想我可以使用计数来查看是否全部空格加起来12个然后删除内容,但似乎是随机删除或根本不删除,任何人都可以帮助java新手

int count = 0;
for (int i = 0; i < 36; i++){
 for (int j = 0; j < 12; j++){
  if (table[i][j] != null){
   count++;
  }

  if (count == 12){
   table[i][j] = null;
  }
 }
}

编辑:嗯,我尝试了所有建议的答案,但它们似乎都不起作用,我试图这样做并像这样输出

| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| 1 . . 3 . . . . 5 . . . |        < this line should take its place              
| a b c d e f g h i j k l |        < this line should delete               
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| x y . r f s . . . . . . |   < this line should move down one                   
| 1 2 3 4 5 6 7 8 9 0 . . |   < this line should move down one             
| A B C D E F G H I J K L |   < this line should delete                
| . . . . . . . . . . . . |

并在下面输出

| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                 
| 1 . . 3 . . . . 5 . . . |       < this line just moved down
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |                       
| . . . . . . . . . . . . |  
| . . . . . . . . . . . . |                     
| x y . r f s . . . . . . |   < this line just moved down one                
| 1 2 3 4 5 6 7 8 9 0 . . |   < this line just moved down one                        
| . . . . . . . . . . . . |

我已经得到了所有工作的输出,但删除整行不起作用

4

3 回答 3

0

您的count变量在 for 循环之外被初始化为零,count == 12只要它总共计算了 12 个元素,而不是同一行中的 12 个元素,则为真。不确定这是否是所需的行为。如果仅当同一行中有 12 个元素时才为真,则应将其放在外部forcount = 0循环的开头。

此外,当count == 12为真时,您将 (i,j) 条目设置为null而不是整行。我认为您的代码应类似于:

int count;
for(int i = 0; i < 36; i++)
{
  count = 0;
  for(int j = 0; j < 12; j++)
  {
    if(table[i][j] != null)
    {
      count++;
    }

    if(count == 12)
    {
      table[i] = null;
    }
  }
}
于 2013-05-25T12:16:32.860 回答
0

尝试这个:

int count = 0;

for (int i = 0; i < 36; i++){
 for (int j = 0; j < 12; j++){
  if (table[i][j] != null){
   count++;
  }

  if (count == 12){
   if (i<=35)
   {
      //Initialize temp to a array like TableType[] temp = new TableType[12];
      // move i to i+1 row
      table[i+1] = table[i];
      table[i] = temp;
   }
  }
 }
}
于 2013-05-25T12:20:47.257 回答
0

使用下面的代码删除整行,您需要count在第一个 for 循环内初始化变量。

for(int i = 0; i < 36; i++)
{
  count = 0;
 //your procession logic
}

if (count == 12)
   {
       table[i]= null;// this will delete/nullify row
      }

你编码

 if (count == 12){
   table[i][j] = null; // this will delete/nullify element j of i only.
  }
于 2013-05-25T12:06:04.170 回答