2016-12-27 71 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)的行的第一個索引。 。 –

相關問題