Java 2D维字符串数组:查找所有元素都相同的列
我很确定这个问题已经被问到,但我似乎无法找到解决方案来帮助我解决问题。我有一个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);
}
}
}
你可以这样说:
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
,而不是遍地存储相同的字符串,这消耗了过多内存,并不能轻易改变。此外,在这种情况下比较字符串只会不必要地降低性能。
我并不完全确定自己理解你的问题,但这应该可行(尽管这项任务可能有更好的算法)。
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说的那样,你应该更好地使用布尔矩阵。
休息是做什么的? –
这将输出列中的所有元素都是“否”。我其实只需要确定的那些。 –
关于原始问题,你还没有很清楚,但是该方法应该做的是遍历矩阵,并返回所有列为“是”(或“ok”或w/e)的行的第一个索引。 。 –
列号类似于每个人都可用的日期。我需要每个人都有空的第一次约会。所以我确实只需要第一列 –
对不起,我在编程方面很新,我不明白我如何检索所有元素等于“是”的列。 –
我已更新答案和代码。 – thatguy