Java 2Dimensional String数组:查找所有元素相同的列

时间:2016-12-27 20:52:11

标签: java arrays string for-loop 2d

我很确定问题已经被问到,但我似乎找不到可以帮助我解决问题的解决方案。

我有一个2维字符串数组。

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

现在有多个列,整个列都填充好了。 实际上我只需要第一列,每个元素都可以。

字符串可能会在以后扩展,所以我需要在.length的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);
            }            
        }
    }

2 个答案:

答案 0 :(得分: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说的那样,你应该最好使用布尔矩阵。

答案 1 :(得分: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[]enum Choice[]并根据其值在单独的函数中返回String,而不是存储相同的字符串一遍又一遍,耗费大量内存,无法轻易改变。此外,在这种情况下比较字符串只会不必要地降低性能。