Hola Susana83!
Te comento lo siguiente: La clase Vector es una clase del api de java, y pertenece al package "util" de java.
Para poder hacer uso de esta clase en una clase propia, como lo es la clase VectorUser en tu ejercicio, hemos de declarar en cabecera de clase la sentencia "import java.util.Vector;" para evitar un error en compilación.
En tu ejercicio podemos observar una linea de comentario que dice :
// import java.util.Vector; omitted
(esta sentencia fue omitida), ahora bien, porque si se omitió esta sentencia el código compila?
Respuesta:
Tu clase VectorUser tiene a su vez una clase Vector, definida con el objetivo de ser usada por esta clase (VectorUser), cuando dos clases se encuentran en un mismo package, no es necesario incluir la sentencia "import Projecto.package.NombreDeLaClase" (import java.util.Vector), porque donde el compilador java busca esta clase, es en el package actual desde donde esta siendo invocada la clase, de no encontrarla (por pertenecer a otro package diferente), pues se necesita especificar la ruta de la clase mediante una sentencia import.
Si contamos con una clase Vector en el api de java, y esta disponible su uso, para que crear una clase Vector en tu clase VectorUser? No fuera mas lógico importar la clase Vector mediante una sentencia import?
Aquí es donde entra lo que yo llamaría un "error lógico" en tu ejercicio. Cuando creamos clases debemos evitar usar nombres de clases propias del api de java o javax ext.. Esto para evitar posibles conflictos y resultados inesperados. Lo lógico al crear una clase Vector en vez de importarla, es que nuestra intención sea cambiar o modificar algo en esta nueva clase Vector pero con referencia a la clase "original" Vector del package util, y eso es justamente lo que esta generando un error de lógica, o resultado inesperado en este ejercicio.
Si consultas el método isEmpty (esta vacío) de la ruta java.util.Vector; encontraras el siguiente detalle:
retorna verdadero si y sólo si este vector no tiene componentes, es decir, su tamaño es cero; false en caso contrario.
En tu clase Vector tenemos una variable int val = 1, que se usa para mediante un condicional if, comparar el tamaño del vector, osea si esta vacío o si contiene elemento/s, también encontramos una linea de comentario que dice:
// compares with 1 instead of 0
(compara con 1 en vez de 0), aclarando que lo correcto seria inicializar la variable "val" a 0, pero que aun estando inicializada a 1 se debe corregir el error lógico.
Debes usar la lógica cuando analizas este fragmento de codigo:
private int val = 1;
public boolean isEmpty() {
if (val == 1) { // compares with 1 instead of 0
return true;
} else {
return false;
}
}
Yo lo interpreto así:
Situación ilógica: Si val (tamaño del Vector) es igual a 1 return true
(el vector esta vacío!) si no return false (el vector contiene elemento/s).
Para solucionar el error lógico, pues aplicamos la lógica.
Situación lógica: Si val (tamaño del Vector) es igual a 1 return "false" (el vector contiene elemento/s)
si no return "true" (el Vector esta vacío!).
A continuación te dejo un ejemplo de como rediseñaria yo tu ejercicio:
// import java.util.Vector; omitted
public class VectorUser
{
public static void main(String[] args)
{
Vector v = new Vector();
if (v.isEmpty())
{
System.out.println("Vector is empty");
}
else {System.out.println("Vector is NOT empty");
}
}
private static class Vector //La declaración de esta clase pasa a estar dentro de la clase VectorUser.
{
private int val = 1;
public boolean isEmpty() {
if (val == 1) { // compares with 1 instead of 0
return false;//anteriormente valía true
} else {
return true;//anteriormente valía false
}
}
// other functionality is same as java.util.Vector
}
}
Espero a ver sido bien explicito. Cualquier duda no dudes en comentar.
Saludos!