0 votos
por (20 puntos) en Java
Bueno stoy empezando con arreglos y tengo una duda con este codigo:

<pre lang='java' lineno='1'>public void buscarElem(int x)
    {
        int res=0;
        int i=0;
        boolean enc = false;
        while(i<arreglo.length &amp;&amp; !enc)
        {
            if(arreglo[i]==x)
            {
                enc =true;
                res=x;
                System.out.println("elemento encontrado:"+ res);
            }else{
                  enc = false;
                  System.out.println("elemento no encontrado.");

                }
                i++;
            }
esto busca un elemento en el arreglo y lo devuelve, funciona correctamente pero lo q no logro solucionar esq digamos cuando encuentra un elemento en la posicion 6 me imprime para los indices del 0-4 "elemento no encontrado." y el 5 devuelve el numero, eso quiero q me notifique pero sin que repita tantas veces los indices "elemento no encontrado" al recorrer la lista, alguna sugerencia es bienvenida muchas gracias de antemano.


4 Respuestas

0 votos
por (240 puntos)
pues... en tu lugar, eliminaria el else del ciclo... si te fijas, es totalmente innecesario, ya que si no entra por el if, el valor de enc seguira siendo false. si es necesario que muestre el mensaje de que el elemento no fue encontrado, entonces puedes agregar un if al final comprobando si lo encontro o no... algo asi:

<pre lang='java' lineno='1'>public void buscarElem(int x)
{
   int i=0;
   boolean enc = false;

   while(i<arreglo.length &amp;&amp; !enc)
   {
       if(arreglo[i]==x)
       {
           enc =true;
           System.out.println("elemento encontrado:"+ x);
       }
   i++;
   }

   if(!enc){
       System.out.println("elemento no encontrado:");
   }
}
0 votos
por (8.5k puntos)
Buenas,

como te comenta garusis el problema es que tenías dentro del bucle la línea que imprimía por pantalla.

No se si estás practicando o necesitas usar los arreglos para algo más, pero por informarte que sepas que existe una clase de utilidades en Java para el manejo de arreglos.

http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/util/Arrays.html

Y ya trae unos métodos para la búsqueda optimizados, un ejemplo de lo que tu quieres hacer hecho con esta clase de utilidades:



import java.util.Arrays;

class Prueba {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] listaEnteros = {1,5, 7, 28, 49, 88, 100, 150, 336, 500};
        Arrays.sort(listaEnteros);
        System.out.println(Arrays.binarySearch(listaEnteros, 88));

    }

}

0 votos
por (3.2k puntos)
Buenas sugerencias.

Pero hay que preguntarse que pasa si el elemento que buscas existe en mas de una posicion, en tal caso deberias imprimir todas las posiciones donde se encuentra.

Aquí la mía.


public void buscarElemento(int x){
  boolean estado = false;
  for(int i=0; i<arreglo.length; i++){
      if(arreglo[i]==x){
         System.out.println("Posicion: "+i);
         estado = true;
      }
  }
  if(!estado) System.out.println("Elemento no encontrado");
}

0 votos
por (3.2k puntos)
en caso de que quieras crear una funcion que busque un elemento y retorne el indice es mas sencillo.

Esta funcion retornara -1 si es que no hallo el elemento, en caso de que existan el elemento en mas de una posicion solo tomara en cuenta la primera coincidencia y retorara el indice-posicion donde se hallo el elemento.


public int posicionElemento(int x, int[] arreglo){
   for(int i=0; i<arreglo.length; i++)
       if(arreglo[i]==x) return i;
   return -1;
}

Preguntas relacionadas

0 votos
2 respuestas
preguntado por bones18 (20 puntos) Ene 28, 2016 en Java
0 votos
3 respuestas
0 votos
1 respuesta
0 votos
1 respuesta
preguntado por jfallasm931 (20 puntos) Mar 27, 2016 en Java
0 votos
8 respuestas
preguntado por sakura (160 puntos) Ene 28, 2016 en Java
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...