☕ Java · Arreglos · Lógica de Programación

Domina los
Vectores en Java

Guía completa e interactiva sobre arreglos de enteros. Aprende con visualizaciones en tiempo real, código anotado y explicaciones claras.

15
Elementos
8
Métodos
10
Conceptos
100%
Interactivo
// int[] vector = new int[15] — mueve el cursor sobre cada celda
introducción

¿Qué aprenderás aquí?

Esta guía te lleva paso a paso por un programa completo en Java que manipula un vector de 15 enteros. Comprenderás la lógica, la sintaxis y la utilidad real de cada elemento del programa.

🎯
Propósito de esta guía
Los arreglos son una de las estructuras de datos fundamentales. Dominarlos te permite trabajar con colecciones de datos, procesar listas y construir algoritmos más complejos.
🚀
Por qué importan los vectores
Las aplicaciones reales almacenan miles de valores: calificaciones, precios, lecturas de sensores IoT. Los vectores te permiten trabajar con muchos valores usando un solo nombre de variable y un bucle.
📖
Lo que aprenderás
  • Declarar y crear arreglos de enteros
  • Llenarlo con valores usando bucles
  • Buscar, filtrar y procesar elementos
  • Encontrar máximo, mínimo y promedio
  • Construir arreglos filtrados dinámicamente
  • Comprender índices, métodos y retorno

fundamentos

¿Qué es un vector?

En Java, un vector (o arreglo) es un contenedor que almacena múltiples valores del mismo tipo bajo un único nombre de variable, accesibles mediante un índice numérico.

// Visualizador Interactivo — haz clic en una celda
Máximo
Mínimo
Sobre promedio
Seleccionado
Suma:
Promedio:
Máximo:
Mínimo:
Sobre promedio:
Vector.java
// Declaración y creación int[] vector = new int[15]; // Acceso por índice vector[0] = 42; // primera celda vector[14] = 84; // última celda // Longitud int tamanio = vector.length; // 15
⚠️ IMPORTANTE

El primer elemento es vector[0], no vector[1]. El último elemento de un arreglo de 15 elementos es vector[14]. Intentar acceder a vector[15] lanzará una ArrayIndexOutOfBoundsException.


vocabulario

Conceptos clave

Cada concepto aparece directamente en el programa. Comprenderlos es la base para leer cualquier código Java.

vector / arregloEstructura
Contenedor de tamaño fijo con valores del mismo tipo.
Almacena múltiples valores bajo un mismo nombre. Cada valor ocupa una posición numerada. En Java el tamaño es fijo al crearlo.
int[] notas = new int[5];
índiceAcceso
Número de posición de un elemento (empieza en 0).
Los índices comienzan en 0. En un arreglo de 15 elementos, los índices válidos van del 0 al 14.
vector[0] // primer elemento vector[14] // último elemento
métodoPOO
Bloque de código reutilizable que realiza una tarea.
Los métodos agrupan lógica. Se definen una vez y se llaman muchas veces, evitando repetición y facilitando la lectura.
public void mostrarVector(int[] v) { // lógica aquí }
parámetroEntrada
Variable que recibe datos al invocar un método.
Se declaran dentro de los paréntesis del método. Actúan como variables locales que contienen los valores pasados al invocarlo.
// "v" y "valor" son parámetros boolean buscarValor(int[] v, int valor)
returnSalida
Envía un resultado de vuelta al invocador.
Cuando un método termina su cálculo, return pasa el resultado. El tipo debe coincidir con el tipo declarado.
return suma; // retorna un int return true; // retorna boolean
forBucle
Repite un bloque un número fijo de veces.
Al trabajar con arreglos, visita cada elemento desde el índice 0 hasta length - 1. Elimina código repetitivo.
for (int i = 0; i < v.length; i++) { // v[i] es el elemento actual }
ifCondición
Ejecuta código solo cuando una condición es verdadera.
Permite al programa elegir un camino según si una condición evalúa a true o false.
if (v[i] > mayor) { mayor = v[i]; }
% (módulo)Operador
Devuelve el resto de una división entera.
Si a % b == 0, entonces a es exactamente divisible por b — es un múltiplo.
10 % 3 = 1 // no es múltiplo 12 % 3 = 0 // SÍ es múltiplo
booleanTipo
Solo puede valer true o false.
Se usa como bandera para rastrear si algo ocurrió: encontrar un valor, si se hallaron múltiplos, etc.
boolean encontro = false; encontro = true; // al encontrar

lógica

Flujo del programa

El programa Java sigue una secuencia clara y ordenada de pasos. Cada operación se apoya en la anterior.

1
Crear el vector
Declarar y reservar memoria para un arreglo de exactamente 15 enteros, todas las celdas inicializadas en 0.
int[] vector = new int[15];
2
Llenar con valores entre 10 y 100
Usar un bucle for y Scanner para solicitar 15 enteros válidos dentro del rango.
for (int i = 0; i < vector.length; i++) vector[i] = sc.nextInt();
3
Mostrar el vector
Llamar a mostrarVector() para imprimir cada elemento con su índice.
mostrarVector(vector);
4
Buscar un valor
Pedir al usuario un valor objetivo y llamar a buscarValor(), que devuelve true si existe.
boolean enc = buscarValor(vector, objetivo);
5
Encontrar máximo y mínimo
obtenerMayor() y obtenerMenor() recorren el arreglo rastreando el valor extremo.
int mayor = obtenerMayor(vector); int menor = obtenerMenor(vector);
6
Calcular suma y promedio
sumarVector() suma todos los elementos. calcularPromedio() devuelve un double para mayor precisión.
int suma = sumarVector(vector); double prom = calcularPromedio(vector);
7
Mostrar múltiplos
Pedir un divisor y llamar a mostrarMultiplos(). Imprime los elementos cuyo resto sea cero.
mostrarMultiplos(vector, divisor);
8
Construir vector filtrado
crearVectorMayoresPromedio() usa dos recorridos para crear un arreglo del tamaño exacto con los elementos que superan el promedio.
int[] filtrado = crearVectorMayoresPromedio(vector);

API de la clase

Clase OperacionesVector

Cada método encapsula una operación única y bien definida sobre el arreglo. Selecciona uno para explorar su firma, propósito y código.

public void mostrarVector(int[] v)
Retorno: void — sin valor de retorno
Itera sobre cada celda e imprime su índice y valor, dando al usuario una vista clara del contenido completo del arreglo. Esencial para depurar y verificar que el vector se llenó correctamente.
💡 Por qué es importante
La visualización es el primer paso de todo proceso de depuración. Sin ver los datos, no puedes verificar si los métodos siguientes trabajan correctamente.
OperacionesVector.java
public void mostrarVector(int[] v) { System.out.println("Vector:"); for (int i = 0; i < v.length; i++) { System.out.println( "v[" + i + "] = " + v[i]); } }
public boolean buscarValor(int[] v, int valor)
Retorno: true si se encontró, false si no
Recorre el arreglo buscando un valor objetivo. Usa una bandera booleana encontro que comienza en false y cambia a true en cuanto se encuentra el valor.
💡 Patrón de bandera booleana
La búsqueda lineal es fundamental en informática. Este patrón aparece en casi todo programa que necesita verificar si un elemento existe en una colección.
OperacionesVector.java
public boolean buscarValor(int[] v, int valor) { boolean encontro = false; for (int i = 0; i < v.length; i++) { if (v[i] == valor) { encontro = true; } } return encontro; }
public int obtenerMayor(int[] v)
Retorno: el valor máximo del arreglo
Comienza asumiendo que el primer elemento es el máximo. Luego compara cada elemento; si es mayor, se convierte en el nuevo máximo.
💡 Máximo acumulado
El patrón se reutiliza en ordenamiento, análisis de datos y programación competitiva. Complejidad O(n) — recorre el arreglo una sola vez.
OperacionesVector.java
public int obtenerMayor(int[] v) { int mayor = v[0]; for (int i = 1; i < v.length; i++) { if (v[i] > mayor) { mayor = v[i]; } } return mayor; }
public int obtenerMenor(int[] v)
Retorno: el valor mínimo del arreglo
Lógica idéntica a obtenerMayor pero la comparación se invierte: un elemento reemplaza al mínimo actual solo si es menor.
💡 Aplicación real
Encontrar los extremos del rango es necesario en estadística, validación de datos y normalización antes del análisis — como en tu proyecto BeeStation al leer sensores de temperatura.
OperacionesVector.java
public int obtenerMenor(int[] v) { int menor = v[0]; for (int i = 1; i < v.length; i++) { if (v[i] < menor) { menor = v[i]; } } return menor; }
public int sumarVector(int[] v)
Retorno: suma total de todos los elementos
Acumula cada elemento en un total creciente comenzando desde cero. El resultado es la suma entera de los 15 valores.
💡 Patrón acumulador
La agregación es una de las operaciones más comunes en procesamiento de datos. Es el bloque base para promedios, totales y muchas medidas estadísticas.
OperacionesVector.java
public int sumarVector(int[] v) { int suma = 0; for (int i = 0; i < v.length; i++) { suma += v[i]; } return suma; }
public double calcularPromedio(int[] v)
Retorno: promedio decimal con precisión double
Llama internamente a sumarVector y divide por la longitud. El cast a double garantiza que no se pierda la precisión decimal.
💡 División entera vs. decimal
Sin el cast (double), Java realiza división entera y descarta la parte fraccionaria. Esto causaría errores en el filtrado por promedio.
OperacionesVector.java
public double calcularPromedio(int[] v) { // cast a double antes de dividir return (double) sumarVector(v) / v.length; }
public void mostrarMultiplos(int[] v, int num)
Retorno: void — imprime múltiplos encontrados
Usa el operador módulo % para evaluar cada elemento. Una bandera booleana rastrea si se encontró al menos un múltiplo, evitando salida vacía.
💡 Divisibilidad con %
La prueba con módulo se usa en muchos escenarios: identificar números pares, separar registros por categoría, implementar paginación.
OperacionesVector.java
public void mostrarMultiplos(int[] v, int num) { boolean encontro = false; for (int i = 0; i < v.length; i++) { if (v[i] % num == 0) { System.out.println(v[i]); encontro = true; } } if (!encontro) System.out.println("No se encontraron múltiplos."); }
public int[] crearVectorMayoresPromedio(int[] v)
Retorno: nuevo arreglo con elementos > promedio
Realiza dos recorridos: el primero cuenta los elementos que superan el promedio (para conocer el tamaño exacto del arreglo); el segundo lo llena con un índice auxiliar j.
💡 ¿Por qué dos recorridos?
Los arreglos Java tienen tamaño fijo. Debes conocer el tamaño antes de crearlos. El primer recorrido cuenta, el segundo llena. Esto es la base del análisis de datos y los sistemas de recomendación.
OperacionesVector.java
public int[] crearVectorMayoresPromedio(int[] v) { double prom = calcularPromedio(v); int contador = 0; // Recorrido 1: contar for (int i = 0; i < v.length; i++) if (v[i] > prom) contador++; int[] result = new int[contador]; int j = 0; // Recorrido 2: llenar for (int i = 0; i < v.length; i++) if (v[i] > prom) result[j++] = v[i]; return result; }

ejemplos

Recorrido del código

Selecciona un tema para explorar cada patrón de código con explicación detallada.

Declaración e inicialización
// Paso 1: declarar el tipo y el nombre int[] vector; // Paso 2: reservar 15 celdas en memoria vector = new int[15]; // O ambos en una sola línea (más común) int[] vector = new int[15]; // Todas las celdas valen 0 inmediatamente: // vector[0]=0, vector[1]=0, ..., vector[14]=0
¿Por qué new int[15]?
La palabra clave new le pide a la JVM reservar un bloque contiguo de memoria suficiente para 15 enteros (60 bytes en la mayoría de plataformas, ya que cada int ocupa 4 bytes). Todas las celdas se inicializan en cero por defecto. El tamaño del arreglo es fijo — no puedes agregar ni eliminar elementos después.
Llenar con validación (10-100)
Scanner sc = new Scanner(System.in); for (int i = 0; i < vector.length; i++) { int val; do { System.out.print("Ingresa el valor " + (i+1) + " (10-100): "); val = sc.nextInt(); } while (val < 10 || val > 100); vector[i] = val; }
El bucle do–while para validar
Un bucle do–while se ejecuta al menos una vez — ideal para leer entradas. Solicita al usuario, lee el valor, verifica si es válido. Si está fuera del rango (menor de 10 o mayor de 100), el bucle se repite. Solo un valor válido avanza el for externo.
Búsqueda lineal
boolean encontro = false; // asumir no encontrado for (int i = 0; i < v.length; i++) { if (v[i] == valor) { encontro = true; // cambiar la bandera } } return encontro;
El patrón de la bandera booleana
Inicializamos encontro en false. Dentro del bucle, si algún elemento coincide con el objetivo, lo cambiamos a true. El bucle siempre verifica todos los elementos — garantizando encontrar todas las ocurrencias. Finalmente, return encontro le dice al invocador el resultado.
Máximo y Mínimo
// Máximo: empieza con v[0] como suposición int mayor = v[0]; for (int i = 1; i < v.length; i++) { if (v[i] > mayor) { mayor = v[i]; } } // Mínimo: solo cambia la comparación int menor = v[0]; for (int i = 1; i < v.length; i++) { if (v[i] < menor) { menor = v[i]; } }
Máximo / Mínimo acumulado
Ambos algoritmos comienzan asumiendo que la respuesta es el primer elemento. El bucle parte del índice 1 (el 0 ya se usó). En cada iteración, si el elemento actual es más extremo que la respuesta actual, ésta se actualiza. Al terminar, tienes el extremo global.
Acumulador de suma
int suma = 0; // acumulador en cero for (int i = 0; i < v.length; i++) { suma += v[i]; // suma = suma + v[i] } return suma;
El patrón acumulador
suma comienza en 0. En cada iteración, el valor actual se añade al total. += es la forma abreviada de suma = suma + v[i]. Al finalizar el bucle, suma contiene el total completo de los 15 valores.
Promedio con cast
// ❌ División entera — pierde decimales int malo = sumarVector(v) / v.length; // ✅ Cast a double antes de dividir double promedio = (double) sumarVector(v) / v.length; return promedio;
¿Por qué convertir a double?
En Java, dividir dos enteros siempre da un resultado entero. Si la suma es 825 y la longitud es 15, 825 / 15 = 55 (exacto). Pero 826 / 15 = 55 (no 55.066…). El cast (double) convierte la suma en punto flotante antes de dividir, preservando la precisión decimal para el filtrado.
Detectar múltiplos
boolean encontro = false; for (int i = 0; i < v.length; i++) { if (v[i] % num == 0) { // sin resto = múltiplo System.out.println(v[i]); encontro = true; } } if (!encontro) { System.out.println("No se encontraron múltiplos."); }
El operador módulo y la bandera encontro
v[i] % num == 0 es verdadero cuando el elemento se divide exactamente sin resto. La bandera encontro cumple un propósito secundario: si el bucle termina sin encontrar ningún múltiplo, el programa imprime un mensaje útil en lugar de producir una salida vacía.
Algoritmo de dos recorridos
double prom = calcularPromedio(v); int contador = 0; // Recorrido 1: contar calificados for (int i = 0; i < v.length; i++) if (v[i] > prom) contador++; // Reservar tamaño exacto int[] result = new int[contador]; int j = 0; // Recorrido 2: llenar for (int i = 0; i < v.length; i++) if (v[i] > prom) result[j++] = v[i]; return result;
¿Por qué dos recorridos?
Los arreglos Java tienen tamaño fijo: debes conocer el tamaño antes de crearlos. El primer recorrido cuenta los elementos que califican. Ese conteo se usa como tamaño del nuevo arreglo. El segundo recorrido lo llena, usando el índice j que avanza independientemente de ii recorre todos; j solo avanza cuando se copia un elemento.

análisis profundo

Análisis del código

Cada construcción usada en este programa tiene un rol específico. Aquí encontrarás una explicación detallada de las más importantes.

🔁
bucle for
Se usa en todos los métodos porque toda operación sobre un vector requiere visitar cada elemento. Inicializa i = 0, verifica i < v.length e incrementa i++ — exactamente v.length repeticiones.
condición if
Hace que el programa "decida" en tiempo de ejecución. Evalúa una expresión booleana: igualdad (==), mayor-que (>), menor-que (<) y divisibilidad (% == 0).
↩️
return
Termina la ejecución del método y envía un valor de vuelta al invocador. Sin él, el resultado del cálculo se pierde. Los métodos void usan return; vacío o lo omiten.
operador %
El módulo devuelve el resto de la división entera. 18 % 5 = 3 porque 18 ÷ 5 = 3 resto 3. Cuando es exactamente 0, el operando izquierdo es múltiplo del derecho.
🚩
bandera booleana
encontro comienza en false. Si la condición se cumple, se establece en true. Al terminar el bucle indica si al menos un elemento coincidente fue encontrado.
🔢
contador
Comienza en 0 e incrementa (contador++) cada vez que un elemento satisface la condición de filtro. Su valor final define el tamaño exacto del nuevo arreglo resultado.
📍
índice i
El contador del bucle que actúa como posición actual. Comienza en 0 y sube hasta v.length - 1. Cada iteración, v[i] hace referencia al elemento en la posición actual.
📝
índice auxiliar j
La "posición de escritura" en el arreglo resultado. Mientras i itera sobre todos los elementos fuente, j solo avanza cuando un elemento pasa el filtro — evitando celdas vacías.

ayuda

Preguntas frecuentes

Respuestas a las dudas más comunes que surgen al estudiar este programa.

¿Qué es exactamente un vector?
Un vector es otro nombre para un arreglo unidimensional. Es una lista numerada de valores del mismo tipo, almacenados juntos en memoria. En Java se declara como int[] v = new int[n];.
¿Por qué el bucle for se repite exactamente 15 veces?
Porque la condición i < v.length se verifica antes de cada iteración. Como v.length es 15 e i comienza en 0, el bucle se ejecuta para i = 0, 1, 2, …, 14 — exactamente 15 veces.
¿Por qué el índice empieza en 0 y no en 1?
Esta es una convención de Java (y de la familia C). El índice representa un desplazamiento desde el inicio del arreglo. El primer elemento está a 0 posiciones del comienzo, así que su índice es 0. Así funciona la mayoría de los lenguajes de programación.
¿Cómo evito un ArrayIndexOutOfBoundsException?
Usa siempre i < v.length (no i <= v.length) como condición del bucle. Recuerda que el último índice válido es v.length - 1. Nunca pongas el tamaño como constante; usa v.length para que el código se adapte si el tamaño cambia.
¿Por qué hay dos bucles en crearVectorMayoresPromedio?
El primer bucle cuenta cuántos elementos pasan el filtro para poder crear un arreglo con el tamaño correcto. Java requiere conocer el tamaño al momento de crearlo. El segundo bucle llena ese arreglo con los elementos que califican.
¿Qué hace (double) en calcularPromedio?
Es una conversión de tipo (cast). Sin ella, Java realiza división entera y descarta la parte fraccionaria. Con la conversión, la suma se trata como double antes de dividir, preservando la precisión decimal para el paso de filtrado.
¿Qué pasa si no se encuentran múltiplos?
La bandera booleana encontro permanece en false. Después del bucle, if (!encontro) captura este caso e imprime un mensaje como "No se encontraron múltiplos." — la salida nunca queda vacía ni confusa.

referencia

Glosario

Definiciones rápidas de cada término técnico utilizado en esta guía.

vector / arreglo
Colección ordenada de tamaño fijo de valores del mismo tipo, accesible mediante un índice numérico.
índice
Entero que comienza en cero e identifica la posición de un elemento dentro de un arreglo.
método
Bloque de código con nombre, reutilizable, que realiza una tarea específica y puede devolver un resultado.
parámetro
Variable declarada en la firma de un método que recibe un valor cuando el método es invocado.
return
Palabra clave que termina la ejecución de un método y envía un valor de vuelta al invocador.
bucle
Estructura de control que repite un bloque de código mientras una condición sea verdadera.
condición
Expresión booleana evaluada en tiempo de ejecución para decidir si un bloque de código se ejecuta.
módulo (%)
El operador resto. a % b devuelve lo que sobra después de dividir a entre b.
boolean
Tipo de dato que solo puede ser true o false. Se usa para banderas y condiciones de control.
Scanner
Clase de java.util que lee entrada desde el teclado u otras fuentes. Ofrece nextInt(), nextDouble(), next().
contador
Variable inicializada en cero que se incrementa cada vez que ocurre un evento específico dentro de un bucle.
filtrado
Proceso de crear una nueva colección que incluye solo los elementos que satisfacen una condición dada.