Determinar el numero mas cercano, dentro del array, al numero dado

publicado por: Anonymous

Buenas tengo este problema: a partir de un array y un numero determinar que numero del array es el mas cercano al numero. No me sale

 public static int masCercano(int[] numeros, int num)
 { 
    int cercano = 0;
    for (int i = 0; i < numeros.length; i++) 
    {
        if (numeros[i] ==  num) 
        {
            return numeros[i];
        }
        else
            if (numeros[i] > num || numeros[i] < num) 
            {
                cercano = numeros[i];
                if (cercano > numeros[i]) 
                {
                    cercano = numeros[i];
                }
                else
                    cercano = numeros[i];
            }
    }
    return cercano;
 }

solución

El problema es que estás pasando por todos los números preguntando si es menor o mayor al número que necesitamos comparar, es decir simplemente cercano lo hará igual al último número que evaluó y fue menor o mayor al número a comparar, pero en ningún momento se está buscando el menor más cercano o el mayor más cercano.

Usando una variable llamada diferencia vamos guardando la que hasta el momento sea la menor diferencia entre los números del arreglo y el número a comparar y así mismo vamos guardando cuál es este número de menor diferencia, sea mayor o menor

    public static int masCercano(int[] numeros, int num) {
        int cercano = 0;
        int diferencia = Integer.MAX_VALUE; //inicializado valor máximo de variable de tipo int
        for (int i = 0; i < numeros.length; i++) {
            if (numeros[i] == num) {
                return numeros[i];
            } else {
                if(Math.abs(numeros[i]-num)<diferencia){
                    cercano=numeros[i];
                    diferencia = Math.abs(numeros[i]-num);
                }
            }
        }
        return cercano;
    }

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *