2010-12-07 30 views
8

¿Cómo se itera a través de una búsqueda de matriz bidimensional para [] [Nombre]?buscar una matriz bidimensional en java

Cuando se encuentra el nombre, se debe devolver el índice para poder cambiar los valores en esa matriz.

[Índice] [Valores].

Además, ¿cómo se ve la sintaxis para el almacenamiento de la matriz encontrada? [] [índice]. Bucle a través del índice y establecer un valor. [0] [1] = bla.

Gracias

+3

favor reformular su pregunta. Las "matrices bidimensionales" en Java son solo matrices de matrices, así que si tiene 'String [] [] matrix = ...', entonces la primera dimensión 'matrix [i]' tiene type 'String []', no 'String'. –

Respuesta

7

veces es más fácil y siempre limpia para poner la búsqueda de un método separado:

private Point find2DIndex(Object[][] array, Object search) { 

    if (search == null || array == null) return null; 

    for (int rowIndex = 0; rowIndex < array.length; rowIndex++) { 
     Object[] row = array[rowIndex]; 
     if (row != null) { 
      for (int columnIndex = 0; columnIndex < row.length; columnIndex++) { 
      if (search.equals(row[columnIndex])) { 
       return new Point(rowIndex, columnIndex); 
      } 
      } 
     } 
    } 
    return null; // value not found in array 
} 

Esto devolverá el primer partido solamente. Si necesita todo, recopile todos los puntos en una lista y devuelva esa lista al final.


Uso:

private void doSomething() { 
    String[][] array = {{"one", "1"},{"two","2"}, {"three","3"}}; 
    Point index = find2DIndex(array, "two"); 

    // change one value at index 
    if (index != null) 
    array[index.x][index.y] = "TWO"; 

    // change everything in the whole row 
    if (index != null) { 
    String[] row = array[index.x]; 
    // change the values in that row 
    } 

} 
3

Actualizado debido a su comentario:

for(String[] subarray : array){ 
    int foundIndex = -1; 
    for(int i = 0; i < subarray.length; i++){ 
     if(subarray[i].equals(searchString)){ 
     foundIndex = i; 
     break; 
     } 
    } 
    if(foundIndex != -1){ 
     // change all values that are not at position foundIndex 
     for(int i = 0; i < subarray.length; i++){ 
     if(i != foundIndex){ 
      subarray[i] = "something"; 
     } 
     } 
     break; 
    } 
} 
+0

Actualicé mi respuesta, para que tenga el índice donde se encontró la cadena. – morja

3

la forma más básica es

for(int xIndex = 0 ; xIndex < 3 ; xIndex++){ 
for(int yIndex = 0 ; yIndex < 3 ; yIndex++){ 
     if(arr[xIndex][yIndex].equals(stringToSearch)){ 
      System.out.println("Found at"+ xIndex +"," + yIndex); 

      for(int remainingIndex = 0 ; remainingIndex < 3 ; remainingIndex++ ){ 
        arr[xIndex][remainingIndex]="NEW VALUES"; 
      } 
      break; 
     } 
} 
} 
+0

Gracias. Esa es la mitad de mi pregunta. ; P Entonces, si encuentro el elemento buscado, ¿cómo configuro el resto de los valores para esa matriz? Digamos que searchingItem estaba en [0] [0] buscado. El elemento estará en el índice 0 de todas las matrices. [0] [0], [1] [0] etc. ¿Entonces quiero editar los valores de [0] [1], [0] [2], [0] [3]? Gracias – jarryd

+0

@alJaree solo necesitas repetir otro ciclo dentro si quieres editar, déjame actualizar –

+0

Gracias. Tengo los valores codificados en las variables. Estos valores se envían a través de un socket en formato binario. Entonces se convierten a String, Split y luego cada token se establece en una variable. Quiero establecer los índices de la matriz encontrada a los valores. Sé el índice para las variables. [foundArray] [name] = Name, [foundArray] [size] = size, etc. ¿Dónde está el índice de matriz encontrado para usar fuera de un bucle? gracias – jarryd

Cuestiones relacionadas