numero rodeado de ceros en array

Iniciado por fprg, 28 Noviembre 2013, 21:10 PM

0 Miembros y 1 Visitante están viendo este tema.

fprg

necesito crear un metodo para encontrar en un array de dos dimensiones, un numero distinto de cero que esté rodeado por ceros.
habia pensado en crear un bucle for para recorrer mi array de dos dimensiones, y si encuentra un valor distinto de cero que mire si los elementos de su alrededor son cero. esto ultimo no se como ponerlo...

trolleoatodos

Es que el número de ceros que puede haber es muy grande ,tu dices si está
rodeado de ceros¿?

fprg

si, encontrar los numeros que estan rodeados de ceros en el array

ivancea96

Bien, tenemos esto:
Código (java) [Seleccionar]
---012
------
0--000
1--010
2--000


Por tanto, array[1][1] es el elemento "base".
ahora, un bucle:
Código (java) [Seleccionar]

int x = ...  // X de la base (array[X][Y])
int y = ...  // Y de la base (array[X][Y])
for(int i=-1;i<2;i++)
   for(int j=-1;j<2;j++)
       if(!(i==0 && j==0))  //Obviamente, el elemento base va a ser diferente de cero. Lo omitimos.
           if(array[i+x][j+y]!=0) return 0;  // Se ha dado que un elemento no era 0. Retornamos false (suponiendo que sea una función)
return 1;  //Al acabar, si no ha retornado aún, significa que los elementos eran 0.


Bueno, ese sería el algoritmo básico. Luego tú tendrías que comprobar que no estea en un lado del array. Recuerda que si está a un lado de el array,  "array[i+x][j+y]" va a dar elementos negativos o por encima del tamaño.

Saludos :D

fprg

he usado tu idea pero aun no me funciona, no se que tengo mal para que no funcione...
public int cuentaNumerosAislados() {
      
       for (int i=0; i< array.length; i++){
         for (int j = 0; j < array.length; j++){
         if (array [j] !=0){
            for(int x = i - 1; x < i+1; x++){
               for(int y = j-1; y < j+1; y++){
                      if(array
  • [y]==0)
                                                          return true;
                            }
                            
                            
                            }
                         }
                   }
                }
          
          return false; }

ivancea96

Vuelve a mirar el código que te puse. No lo copiaste bien. Hay 2 bucles for. Al array es unidireccional.