programas - recorrer arreglo bidimensional java
Compruebe si el valor existe en una matriz multidimensional java (3)
Creé una matriz de enteros 5x5 y se inicializó con el valor i * j. Exists
método existente toma un número de fila y un valor para buscar.
private static Integer[][] myarray = new Integer[5][5];
public static boolean exists(int row, int value) {
if(row >= myarray.length) return false;
List<Integer> rowvalues = Arrays.asList(Arrays.asList(myarray).get(row));
if(rowvalues.contains(value)) return true;
return exists(row+1, value);
}
Sin un for loop
, ¿hay alguna manera de ver si existe un valor en una multidimensional array
? encontré
Arrays.asList(*ArrayName*).contains(*itemToFind*)
pero eso solo buscará la primera dimensión de la matriz, y necesito buscar 2 dimensiones.
Sí.
Puede usar filtros Bloom ( http://en.wikipedia.org/wiki/Bloom_filter ) o crear un índice basado en árbol para las teclas de su Matriz, como un Trie ( http://en.wikipedia.org/wiki) / Trie )
Básicamente, necesitaría una estructura de datos para buscar los valores, y no las claves. No costaría mucho espacio o velocidad ya que podría reutilizar las referencias de los objetos de valor en ambas estructuras de datos (la suya y la que elija)
Puedes hacer casi cualquier cosa con recursividad si te molestas con su lógica. En este caso, no debería ser demasiado difícil
private boolean checkForValue(int val, int row, int col){
if(row == numRows && col == numCols)
return false;
else{
if(values[row][col] == val)
return true
else if(col < (numCols - 1))
checkForValue(val, row, col + 1);
else
checkForValue(val, row + 1, 1);
}
}
Sin embargo, si solo quieres ahorrar tiempo, creo que el ciclo for es bastante eficiente para comenzar
private boolean checkForValue(int val){
for(int i = 0; i < numRows; i++){
for(int j = 0; j < numCols; j++){
if(values[i][j] == val) return true;
}
}
}
return false;
Tampoco es demasiado duro.