我很确定问题已经被问到,但我似乎找不到可以帮助我解决问题的解决方案。
我有一个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);
}
}
}
答案 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
,而不是存储相同的字符串一遍又一遍,耗费大量内存,无法轻易改变。此外,在这种情况下比较字符串只会不必要地降低性能。