2016-12-27 46 views
1

我很确定这个问题已经被问到,但我似乎无法找到解决方案来帮助我解决问题。我有一个2维的字符串数组。Java 2D维字符串数组:查找所有元素都相同的列

String[][] available = new String[10][15]; 

该数组包含单词:ok和no以及每个元素之间的选项卡。这是它的外观:

ok ok no ok ok no ok ok ok no no no ok ok ok 
ok no ok no ok ok ok no ok ok no ok ok no ok 
ok ok ok ok no no no no no ok no ok ok no ok 
ok no ok ok no no no no no ok no ok ok no ok 
no no ok ok no no no no no ok no ok ok ok ok 
ok ok ok ok no ok no no no ok no ok ok no ok 

现在有多发性列,其中整列充满了确定。 我其实只需要第一列,每个元素都可以。

字符串可能被后来扩展,所以我需要它在一个for循环使用。长度 这段代码打印出正确的列,但问题是当阵列扩展了该西港岛线不工作:

for (int r =0; r < 10; r++){ 
     for (int k = 0; k < 15; k++){ 
      if ("ok" == poll[r +0][k] && 
       "ok" == poll[r +1][k] && 
       "ok" == poll[r +2][k] && 
       "ok" == poll[r +3][k] && 
       "ok" == poll[r +4][k] && 
       "ok" == poll[r +5][k] && 
       "ok" == poll[r +6][k] && 
       "ok" == poll[r +7][k] && 
       "ok" == poll[r +8][k] && 
       "ok" == poll[r +9][k]){ 
       System.out.println(k); 
      }    
     } 
    } 

回答

0

你可以这样说:

int columnNumber = -1;  

for (int column = 0; column < available.length; column++) { 

    boolean columnYes = true;   

    for (int row = 0; row < available.length; row++) { 
     if (!available[row][column].equals("yes")) { 
      columnYes = false; 
     } 
    } 

    if (columnYes) { 
     columnNumber = column; 
     break; 
    } 
} 

该代码将搜索第一柱中的所有元素都是"yes"并返回其指数,该列columnNumber = column + 1;。如果有没有这样的列你得到-1。请记住,您的列必须全部为,其大小等于(正如我对您的问题所了解的),才能使上述代码正常工作。

你也应该考虑让你的阵列boolean[]enumChoice[],并返回基于其在一个单独的函数值的String,而不是遍地存储相同的字符串,这消耗了过多内存,并不能轻易改变。此外,在这种情况下比较字符串只会不必要地降低性能。

+0

列号类似于每个人都可用的日期。我需要每个人都有空的第一次约会。所以我确实只需要第一列 –

+0

对不起,我在编程方面很新,我不明白我如何检索所有元素等于“是”的列。 –

+0

我已更新答案和代码。 – thatguy

0

我并不完全确定自己理解你的问题,但这应该可行(尽管这项任务可能有更好的算法)。

int counter = 0; 

for (int row = 0; row < 10; row++) { 
    for (int col = 0; col < 15; col++) { 
     if (available[row][col].equals("ok") == false) break; 
     else counter++; 
    } 

    if (counter == 15) return row; 
} 

return -1; // no row has *all* columns set to "yes" 

如果要算上发生这种情况(而不是第一线)线,只需添加一个额外的柜台,并在年底返回。

尽管像@thatguy说的那样,你应该更好地使用布尔矩阵。

+0

休息是做什么的? –

+0

这将输出列中的所有元素都是“否”。我其实只需要确定的那些。 –

+0

关于原始问题,你还没有很清楚,但是该方法应该做的是遍历矩阵,并返回所有列为“是”(或“ok”或w/e)的行的第一个索引。 。 –

相关问题