Comparación de contenidos en 2 vectores

kerae
01 de Febrero del 2004
Hola,
en primer lugar quiero felicitaros por este sitio, lleno de tantos consejos útiles para los que aprendemos a programar con java.

Me gustaría consejo para realizar el siguiente programa:
1. Un usuario debe indicar el número de personas para las que va a introducir información personal.

2. Introduce sus nombres por teclado y los almacena en vectores.

3. Al mismo tiempo que introduce los datos, java debe comprobar que el último dato indicado no está repetido.

He escrito el código de abajo, pero no me funciona correctamente cuando hace la comparación. Aún soy principiante y no sé si lo que hago es correcto o no.

Gracias por la ayuda :-)

//comparacion.java
import java.util.*;
import java.io.*;
class comparacion
{

public static void main (String[] args)
{
ConsoleInput in = new ConsoleInput();
PrintWriter out= new PrintWriter(System.out, true);
Vector primero = new Vector(); // vector para almacenar los datos
Vector segundo = new Vector(); // vector temporal

int numero_personas; // variable para almacenar el núm de elem. a introducir


String nombre1 = "";
String nombre2 = "";

out.println("Indique el número de personas para las que quiera almacenar información");
numero_personas = in.readInt();

// limpiamos el búfer
in.readString();

out.println("Indique los nombres de las personas: ");

Loop:
for ( int counter = 0; counter < numero_personas; counter++)
{
String nombre = in.readString();

segundo.add(nombre);

primero.add(counter,segundo );

if ( counter >= 1 )
{
// convertimos el contenido de los vectores en Strings
nombre1 = (String) primero.get(counter);
nombre2 = (String) primero.get(counter-1);

if( nombre1.equals(nombre2))
{
out.println("El nombre introducido está repetido. Por favor, introduzca un nuevo valor");
continue Loop;
}
}

// borramos el contenido del vector temporal
segundo = new Vector();
}



}


}

Heihachi
01 de Febrero del 2004
Hola,

El vector primero no contiene String, lo estás llenando con otros Vectores (cuando haces primero.add(counter,segundo ))

Así que al hacer nombre1 = (String) primero.get(counter);
el programa te dará un ClassCastException

De todas maneras la calse Vector tiene un método para comprobar si un elemento ya está o no.

Para introducir los nombres podrías hacer algo como:

if (!primero.contains(nombre)){
primero.add(nombre);
}

y no necesitas dos vectores.

Además que en el caso que el programa funcionara, sólo estás mirando que el nombre introducido no es igual al anterior, no que no esté en el Vector

Para lo que quieres hacer te vendría mejor utilizar un HashSet en lugar de un Vector, ya que no permite elementos repetidos y ni siquiera tendrías que hacer la comprobación. Puedes consultarlo aquí:

http://java.sun.com/j2se/1.4.1/docs/api/java/util/HashSet.html

Saludos!

kerae
01 de Febrero del 2004
Muchas gracias.

El programa se ha simplificado más y además funciona bien!