Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda Please [Arrays]

Hola, buenas noches. Verán estoy resolviendo un problema sencillo que trata sobre imprimir los valores no repetidos de un array luego que el usuario haya ingresado los valores. Pero no encuentro la forma de evitar imprimir esos valores repetidos.

Si pueden me echan un cable. Saludos. Les dejo el codigo que tengo:

import java.util.Scanner;

public class NumerosIguales
{
 private static final int TAMANIO=5;
 private int[] numeros = new int[TAMANIO];
 enum Estado {SI,NO};
 Estado imprimir;
 
 public void setDatos()
 {
   int numero;
   Scanner t= new Scanner(System.in);
   
   for(int i=0; i<numeros.length; i++)
   {
     // pedimos que se ingrese un numero entre 10 y 100
     System.out.println("Ingrese un numero entero en el rango 10-100");
     numero = t.nextInt();
     
     // si el numero ingresado no esta entre ese rango, el programa
     // pedira que se ingrese nuevamente el numero, hasta que sea correcto
     if(numero<10 || numero>100) {
       do {
         System.out.println("El numero ingresado no esta en el rango indicado. Ingrese nuevamente");
         numero = t.nextInt();
       } while(numero<10 || numero>100);
     }
     // agregamos el valor ingresado al arreglo
     numeros[i] = numero;
   } // fin for
 } // fin metodo
 
 // imprimimos los numeros unicos(No repetidos)
 public void getDatosUnicos()
 {
   //itera a traves del arreglo
   for(int i=0;i<TAMANIO;i++)
    {
     // establece por defecto imprimir a SI
     imprimir = Estado.SI;
     
     // itera a traves del arreglo para poder comprar los valores
      for(int j=i+1;j<TAMANIO;j++)
       {
        // si encuentra valores iguales, cambia imprimir a NO
        if(numeros[i]==numeros[j])
         {
          imprimir = Estado.NO;
         }
       } // fin for externo
         // si no se han encontrado valores iguales, se imprime el 1er elemento del array
         if (imprimir == Estado.SI)
         System.out.println(numeros[i]);
    } // fin for externo
 } // fin metodo
 
}


El array lo inicie en: 25,35,45,45,55. Lo que deseo es que muestre: 25,35,55

Pero muestra esto:

Los elementos unicos son:
25
35
45
55

febrero 11, 2013 | Unregistered CommenterRandomized

//itera a traves del arreglo
for(int i=0;i<TAMANIO;i++)
Ahí empiezas a recorrer el array para designar el número comprobar.
25,35,45,45,55 Estos son los números que has introducido.
Como ahora i = 0, vas a comprobar el 25.

for(int j=i+1;j<TAMANIO;j++)
este el el bucle para comparar y lo empiezas en la posición que sigue a la del numero que quieres comprobar.
Cuando llega el segundo 45 sólo lo comparas con el 55, con lo que no está repetido y te lo imprime.

febrero 11, 2013 | Unregistered Commenterjmtu

Hola jmtu. Primero gracias por responder :) Te comento que ya tengo el code como queria que funcione:

el método correcto es así:

public void getDatosUnicos()
{
//itera a traves del arreglo
for(int i=0;i<TAMANIO;i++)
{
// establece por defecto imprimir a SI
imprimir = Estado.SI;

// itera a traves del arreglo para poder comprar los valores
for(int j=0;j<TAMANIO;j++)
{
// mientras que i sea diferente a j se efecuta la comparacion,
// por que si se compara a sí mismo, dará error de ejecución
if (i != j){
// si encuentra valores iguales, cambia imprimir a NO
if(numeros[i]==numeros[j])
{
imprimir = Estado.NO;
}
} // de esta manera, cada elemento del arreglo se compara con todos los demás
// menos con él mismo

} // fin for externo

// si no se han encontrado valores iguales, se imprime el 1er elemento del array
if (imprimir == Estado.SI)
System.out.println(numeros[i]);
} // fin for externo
} // fin metodo


Saludos!

febrero 11, 2013 | Unregistered CommenterRandomized

Espero sea de tu ayuda:

public static void main(String[] args) {

int[] numeros = {1,2,3,4,5,5,6,6};
boolean flag = true;
for (int i = 0; i < numeros.length; i++) {

for (int j = 0; j < numeros.length; j++) {

int val = numeros[i];
int val2 = numeros[j];

if(i!=j){
if(val==val2){
flag = false;
}
}

}
if(flag)
System.out.println(numeros[i]);
}

}

febrero 12, 2013 | Unregistered CommenterCarlos