2010-12-07 10 views
8

Comment parcourir une recherche bidimensionnelle en tableau pour [] [Nom]?rechercher un tableau bidimensionnel en java

Lorsque le nom est trouvé, l'index doit être retourné afin que je puisse changer les valeurs dans ce tableau.

[Index] [Valeurs].

De même, comment la syntaxe recherche-t-elle le stockage dans le tableau trouvé? [] [index]. Parcourez l'index et définissez une valeur. [0] [1] = bla.

Merci

+3

S'il vous plaît reformuler votre question. "Les tableaux bidimensionnels" en Java sont juste des tableaux de tableaux, donc si vous avez 'String [] [] matrix = ...', alors la première dimension 'matrix [i]' a le type 'String []', pas 'String'. –

Répondre

7

Parfois, il est plus facile et toujours plus propre à mettre la recherche dans une méthode distincte:

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 
} 

Cela retournera la première correspondance seulement. Si vous avez besoin de tous, collectez tous les points dans une liste et renvoyez cette liste à la fin.


Utilisation:

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

Mise à jour en raison de votre commentaire:

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

J'ai mis à jour ma réponse, de sorte que vous aurez l'index où la chaîne a été trouvée. – morja

3

la façon la plus simple est de

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

Merci. C'est la moitié de ma question. ; P Donc, si je trouve l'élément recherché, comment puis-je définir le reste des valeurs pour ce tableau. Disons que la méthode searchItem a été [0] [0] searchingItem sera à l'index 0 de tous les tableaux. [0] [0], [1] [0] etc. Je veux ensuite modifier les valeurs de [0] [1], [0] [2], [0] [3]? Merci – jarryd

+0

@alJaree vous avez juste besoin d'itérer autre boucle à l'intérieur si faire en éditant, laissez-moi mettre à jour –

+0

Merci. J'ai les valeurs codées en dur aux variables. Ces valeurs sont envoyées sur une socket en binaire. Ils sont donc convertis en String, Split et chaque jeton est défini sur une variable. Je veux définir les index du tableau trouvé aux valeurs. Je connais l'indice pour les variables. [foundArray] [name] = Nom, [foundArray] [size] = taille etc. Où est l'index de tableau trouvé à utiliser en dehors d'une boucle? merci – jarryd

Questions connexes