public static void main(String[] args) {
// Definir un ArrayList
// Pongo ArrayList porque es el tipo general (arraylist)
// Pongo <..> para especificar el tipo del
// contenido del ArrayList (<String> <LocalDate>...)
// Muy importante, si quiero de valores primitivos
// no pongo el valor primitivo sino la clase que lo envuelve
// int->Integer double->Double...
// Lo tengo que crear con la palabra clave 'new'
ArrayList<String> lista = new ArrayList<String>();
ArrayList<String> lista2 = new ArrayList<String>();
ArrayList<Integer> numeros=new ArrayList<Integer>();
// Una vez hemos construído el ArrayList ya podemos
// trabajar con él
lista.add("Ana");
lista.add("eva");
lista.add("pep");
System.out.println(lista.size());
lista2.add("Ana");
lista2.add("eva");
lista2.add("pep");
System.out.println(lista.size());
// Recorrer el arraylist
for(int i=0;i<lista.size();i++) {
System.out.println(lista.get(i));
}
for(String nombre:lista) {
System.out.println(nombre);
}
// Añadiendo elementos sueltos a través de la utilidad
// de Arrays 'asList' que convierte elementos
// en una lista
lista.addAll(Arrays.asList("Juan","rosa"));
// Añado una lista ya existente
lista.addAll(lista2);
// Elimina el elemento que esté en la posición 1
lista.remove(1);
// Elimina el elemento
lista.remove("Ana");
System.out.println(lista);
lista.remove("ruth");
// eliminar todos los elementos de una colección
lista.removeAll(Arrays.asList("Ana"));
// Arrays.asList nos convierte una serie de elementoss
// En una lista y lo puedo utilizar para inicializar
ArrayList<String> alumnos = new ArrayList<String>(Arrays.asList("Ana","Eva"));
System.out.println(alumnos);
// Añadir en una posición determinada
alumnos.add(1,"Rigoberta");
System.out.println(alumnos);
// Modifico el elemento que está en la posición 0
alumnos.set(0, "Ana Pi");
System.out.println(alumnos);
// Elimina el primero
alumnos.removeFirst();
System.out.println(alumnos);
// Métodos para buscar elementos
System.out.println(alumnos.contains("Eva"));
System.out.println(alumnos.contains("Evar"));
// El indexOf funciona parecido al String
System.out.println(alumnos.indexOf("Eva"));
System.out.println(alumnos.indexOf("Evar"));
int pos=lista.indexOf("pep");
int lastPos=lista.lastIndexOf("pep");
System.out.println(pos+"-"+lastPos);
lista.add("Zacarías");
// Ordenamos alfabeticamente pero ojo mayúsculas primero
lista.sort(null);
System.out.println(lista);
}
Mes: noviembre 2023
Rotar Derecha, Paridad array y Duplicados
public static void main(String[] args) {
int[] numeros= {1,2,3,4,5};
System.out.println(Arrays.toString(rotarDerecha(numeros,2)));
System.out.println(Arrays.toString(numeros));
}
/*
* Crear una función rotarDerecha a la que la pasamos un
* array de enteros y nos devuelve el array con los elementos
* desplazados a la derecha (el último va al principio)
rotarDerecha([1,2,3,4]) -> [4,1,2,3]
*/
public static int[] rotarDerecha(int[] array, int pos) {
int longitud=array.length;
int[] nuevo=new int[longitud];
// En el primero pongo el último
// En los siguientes del nuevo pongo el que está en
// la posición anterior del que me pasan
//nuevo[0]=array[array.length-1];
for(int i=0;i<longitud;i++) {
nuevo[i]=array[(i-pos+longitud) % longitud];
}
return nuevo;
}
public static int paridadArray(int[] numeros) {
// Dos contadores: pares e impares
int pares = 0;
int impares = 0;
for (int numero : numeros) {
if (numero % 2 == 0) {
pares++;
} else {
impares++;
}
}
switch (Integer.compare(pares, impares)) {
case -1:
return 1;
case 1:
return 2;
default:
return 0;
}
}
public static boolean hayDuplicados(int[] numeros) {
int[] ordenado=numeros.clone();
Arrays.sort(ordenado);
// { 1, 2, 3, 4, 6,5,1 }->{1,1,2,3,4,5,6}
for(int i=0;i<ordenado.length-1;i++) {
if (ordenado[i]==ordenado[i+1]) {
return true;
}
}
return false;
}
// Sin ordenar la receta es lo que haría yo
public static boolean hayDuplicadosSin(int[] numeros) {
for(int i=0;i<numeros.length;i++) {
int numero=numeros[i];
for(int j=i+1;j<numeros.length;j++) {
if(numeros[j]==numero) {
return true;
}
}
}
return false;
}
Dos maneras de encontrar el menor y probar cual tarda más
public static void main(String[] args) {
// Vamos a crear un array con 10000 números aleatorios
// Y vamos a comprobar cronómetro en mano cuanta diferencia hay
// Entre usar un método y otro
int[] numeros=new int[10000];
for (int i=0;i<numeros.length;i++) {
numeros[i]=(int) (Math.random()*100+1);
}
//System.out.println(Arrays.toString(numeros));
LocalTime ahora=LocalTime.now();
System.out.println(menorElemento(numeros));
LocalTime despues=LocalTime.now();
Duration tiempo=Duration.between(ahora, despues);
System.out.println(tiempo);
ahora=LocalTime.now();
System.out.println(menorElementoOrden(numeros));
despues=LocalTime.now();
tiempo=Duration.between(ahora, despues);
System.out.println(tiempo);
}
// Devolver el menor elemento de un array
public static int menorElemento(int[] numeros) {
// Almacenar el elemento menor
int menor=numeros[0];
// Recorrer el array
for(int numero:numeros) {
// Comparo cada valor con el que ya tengo
if(numero<menor) {
menor=numero;
}
}
return menor;
}
// Los arrays se pueden modificar en las funciones
// pero no SE DEBEN MODIFICAR por defecto
public static int menorElementoOrden(int[] numeros) {
int[] copia=numeros.clone();
Arrays.sort(copia);
return copia[0];
}
Resolución ejercicios fechas java
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Arrays;
import java.util.Locale;
import java.util.Scanner;
public class FechasHoras {
public static void main(String[] args) {
// La función esViernes me devuelve...
for (LocalDate fecha : diasLaborablesArray(1, 11, 2023)) {
System.out.println(fecha);
}
System.out.println(Arrays.toString(diasLaborablesArray(1, 11, 2023)));
}
public static boolean esViernes() {
// Fecha de hoy
LocalDate hoy = LocalDate.now();
// Si hoy es viernes
return hoy.getDayOfWeek() == DayOfWeek.FRIDAY;
}
public static int hastaelFinde() {
// Fecha de hoy
LocalDate hoy = LocalDate.now();
// Cogemos el día numérico de la sema 1-lunes...7 domingo
int dia = hoy.getDayOfWeek().getValue();
// Si es sábado o domingo devolvemos 0
if (dia >= 6) {
return 0;
} else {
// Devolvemos 6 menos el valor
return 6 - dia;
}
}
public static int hastaelFindeNinja() {
// Obtenemos el día numérico de la semana
int dia = LocalDate.now().getDayOfWeek().getValue();
// Operador ternario para devolver 0 o la resta de días como
// En el ejemplo anterior
// Operador ternario if comprimido
// condicion ? valor si cierto : valor si falso
return dia >= 6 ? 0 : 6 - dia;
}
public static LocalDate vencimiento(LocalDate fecha, int dias) {
// Añado los días a la fecha
return fecha.plusDays(dias);
}
public static String diaCumple(int mes, int dia) {
// Creo la fecha de cumpleaños de este año
LocalDate cumple = LocalDate.of(LocalDate.now().getYear(), mes, dia);
// Obtengo el día de la semana en formato string
return cumple.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.of("es", "es"));
}
public static String diaCumpleOtro(int mes, int dia) {
LocalDate cumple = LocalDate.of(LocalDate.now().getYear(), mes, dia);
// Lo mismo pero usando un formateador
return cumple.format(DateTimeFormatter.ofPattern("EEEE"));
}
public static int numFestivos(int anyo, int mes) {
// Pongo la fecha del dia uno de mes
LocalDate fecha = LocalDate.of(anyo, mes, 1);
// Defino un contador
int festivos = 0;
// Mientras sigamos en este mes
while (fecha.getMonthValue() == mes) {
// Comparo con sábado y domingo
if (fecha.getDayOfWeek() == DayOfWeek.SATURDAY || fecha.getDayOfWeek() == DayOfWeek.SUNDAY) {
festivos++;
}
// Sumo uno al día para recorrer todos los días del mes
fecha = fecha.plusDays(1);
}
return festivos;
}
public static String diasLaborables(int dia, int mes, int anyo) {
// Creo la fecha que me han pasado
LocalDate fecha = LocalDate.of(anyo, mes, dia);
// Aquí acumularé las fechas
String resultado = "";
// Contador días laborables
int cont = 0;
while (cont < 15) {
// Si el día es laborable
if (fecha.getDayOfWeek().getValue() < 6) {
// Lo añado a la cadena
resultado += fecha.toString() + " - ";
// Sumo uno al contador
cont++;
}
// Siempre sumo uno a la fecha
fecha = fecha.plusDays(1);
}
return resultado;
}
public static LocalDate[] diasLaborablesArray(int dia, int mes, int anyo) {
return diasLaborablesArray(dia,mes,anyo,15);
}
public static LocalDate[] diasLaborablesArray(int dia, int mes, int anyo, int numDias) {
// Creo la fecha que me han pasado
LocalDate fecha = LocalDate.of(anyo, mes, dia);
// Aquí acumularé las fechas
LocalDate[] resultado = new LocalDate[15];
// Contador días laborables
int cont = 0;
while (cont < numDias) {
// Si el día es laborable
if (fecha.getDayOfWeek().getValue() < 6) {
// Lo añado a la cadena
resultado[cont] = fecha;
// Sumo uno al contador
cont++;
}
// Siempre sumo uno a la fecha
fecha = fecha.plusDays(1);
}
return resultado;
}
}
Ejemplos fechas en Java
LocalDate fecha = LocalDate.now();
System.out.println(fecha);
System.out.println(fecha.getDayOfMonth());
System.out.println(fecha.getDayOfYear());
System.out.println(fecha.getYear());
// Crear una fecha específica
LocalDate specificDate = LocalDate.of(2023, 5, 14);
System.out.println(specificDate.getDayOfWeek().getValue());
LocalDate juevesproximo=fecha.plusWeeks(1);
System.out.println(juevesproximo);
// En temp cojo la fecha de hoy
LocalDate temp=LocalDate.now();
temp=LocalDate.of(2023, 1, 1);
// Miro el mes en el que estamos
int mes=temp.getMonthValue();
// Mientras la fecha siga siendo del mismo mes
while(temp.getMonthValue()==mes) {
// Si es sábado, imprimo la fecha
if (temp.getDayOfWeek()==DayOfWeek.SATURDAY) {
System.out.println("Este día es sábado:"+temp);
temp=temp.plusDays(7);
}else {
temp=temp.plusDays(1);
}
// Sumo un día a la fecha
}
temp=LocalDate.of(2023, 8, 15);
// Formatear
System.out.println(temp.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
// Parsear
LocalDate fechaParseada = LocalDate.parse("2022-12-03");
System.out.println("Fecha parseada: " + fechaParseada);
// Parsear con un formato determinado
LocalDate fechaParseada2 = LocalDate.parse("03/12/2023",DateTimeFormatter.ofPattern("dd/MM/yyyy"));
System.out.println("Fecha parseada: " + fechaParseada2);
// Crear una hora específica
LocalTime specificTime = LocalTime.of(14, 30,50);
System.out.println(specificTime);
// Momento actual
LocalTime ahora=LocalTime.now();
System.out.println(ahora);
// Obtener partes de la hora
System.out.println(ahora.getHour());
System.out.println(ahora.getMinute());
System.out.println(ahora.getNano());
// Añadir o restar partes de tiempo
LocalTime momento=ahora.plusHours(2);
System.out.println(momento);
// Podemos parsear una cadena de caracteres
LocalTime cita=LocalTime.parse("10:00:00");
System.out.println(cita);
// Crear una fecha y hora específica
LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 15, 14, 30);
System.out.println(specificDateTime);
// Obtener partes de la fecha/hora
LocalDateTime esteMomento=LocalDateTime.now();
System.out.println(esteMomento);
System.out.println(esteMomento.getMonthValue());
System.out.println(esteMomento.getHour());
System.out.println(esteMomento.getSecond());
System.out.println(esteMomento.getDayOfYear());
// Sumar y restar partes de tiempo
esteMomento=esteMomento.plusDays(1);
esteMomento=esteMomento.plusHours(1);
System.out.println(esteMomento);
// Parsear una fecha y una hora
LocalDateTime fechahora=LocalDateTime.parse("2023-11-17T21:12:10");
System.out.println(fechahora);
Más ejemplos arrays
public static void main(String[] args) {
// Resolver el problema de rellenar un array de string
// Con puntos que se incrementan
String[] puntos = new String[10];
String cadena = ".";
for (int i = 0; i < puntos.length; i++) {
puntos[i] = ".".repeat(i + 1);
cadena += ".";
}
System.out.println(Arrays.toString(puntos));
int[] a = { 1, 20, 200, 3, 40, 50 };
int[] b = { 1, 2, 3 };
int[] c = a;
// Nos comprueba si dos arrays diferentes tienen
// los mismos valores
System.out.println(Arrays.equals(a, b));
//Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(c));
// Rellena un array con un valor repetido
// Arrays.fill(c, 9);
System.out.println(Arrays.toString(a));
// Copia los n primeros elementos de un array
int[] j = Arrays.copyOf(a, 2);
System.out.println(Arrays.toString(j));
// Esto copia un rango de un array en otro
int[] k = Arrays.copyOfRange(a, 1, 2);
System.out.println(Arrays.toString(k));
// Compara los valores de un array y devuelve
// 1 si el primero es mayor, 0 si son iguales y -1
// Si el segundo es mayor
System.out.println(Arrays.compare(a, b));
// Hace una búsqueda binaria pero el arraytiene
// que estar ordenado previamente
int pos = Arrays.binarySearch(a, 10);
System.out.println(pos);
System.out.println(mayorArray(a));
System.out.println(Arrays.toString(a));
}
// Devuelvo el elemento mayor de un array
static int mayorArray(int[] numeros) {
// Copio (clono) el array para que no se modifique en el main
int[] temp=numeros.clone();
// Lo ordeno
Arrays.sort(temp);
// Devuelvo el ultimo
return temp[temp.length - 1];
}
Ejemplos split
String frase="En un lugar de la mancha de cuyo nombre";
// Dividimos la cadena por espacio
// Los espacios no se incluyen
// Obtenemos un array con los elementos resultantes
String[] palabras=frase.split(" ");
System.out.println(Arrays.toString(palabras)); //[En, un, lugar, de, la, mancha, de, cuyo, nombre]
frase="1,2,3,4,5,6";
palabras=frase.split(",");
System.out.println(Arrays.toString(palabras)); //[1, 2, 3, 4, 5, 6]
frase="En un lugar de la mancha de cuyo nombre";
palabras=frase.split(" ");
String masLarga="";
// Recorro el array con foreach
for(String palabra:palabras) {
// Si la palabra en la que estoy es más larga
// Que la que ya tenía la sustituyo
if (palabra.length()>masLarga.length()) {
masLarga=palabra;
}
}
System.out.println("La palabra más larga es "+masLarga);
Más ejemplos Arrays
public static void main(String[] args) {
// tipo[] nombredelarray=new tipo[tamaño] o {valores,...}
// Con tamaño
int[] cuadrados = new int[10];
// Con valores
int[] notas = { 6, 3, 8, 9, 7 };
// Un tipo string
String[] alumnos = { "Ana", "Eva", "Pep", "Juan" };
// recorro el array usando un for normal
for (int i = 0; i < alumnos.length; i++) {
System.out.println(alumnos[i]);
}
// recorro el array usando el foreach (solo valoes)
for (String alumno : alumnos) {
System.out.println(alumno);
}
// Recorro el array y lo modifico porque tengo el índice
for (int i = 1; i <= cuadrados.length; i++) {
cuadrados[i - 1] = i * i;
}
System.out.println(Arrays.toString(cuadrados)); // [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
// Modifico la posición 1 del array
alumnos[1] = "Federica";
System.out.println(Arrays.toString(alumnos)); // [Ana, Federica, Pep, Juan]
// Suma de los cuadrados que hemos generado antes
int suma = 0;
// Utilizo foreach porque solo quiero los valores
for (int cuadrado : cuadrados) {
suma += cuadrado;
}
System.out.println(suma);
// Creo un array de un tamaño fijo
Scanner sc = new Scanner(System.in);
System.out.println("¿De qué tamaño quieres la lista");
int tamanyo = sc.nextInt();
// EL tamaño puede venir de una variable
int[] lista = new int[tamanyo];
// Relleno el array pidiendo valores al usuario
for (int i = 0; i < lista.length; i++) {
System.out.println("Dime el número " + (i + 1) + ":");
lista[i] = sc.nextInt();
}
sc.close();
System.out.println(Arrays.toString(lista));
int total = sumaArray(lista);
System.out.println(total); // Imprimirá la suma de los número del usuario
}
// Creo una función que me suma todos los números
// Del array que le pasemos
static int sumaArray(int[] numeros) {
int total = 0;
// Uso el foreach nunca se modifica el array
for (int numero : numeros) {
total += numero;
}
return total;
}
Arrays ejemplos
public static void main(String[] args) {
// Defino una variable como entero
// almacena 1 valor entero
int edad = 5;
// Para almacenar más de un valor del mismo tipo
// se usan los arrays
int[] edades = new int[5];
edades[0] = 20;
edades[1] = 70;
edades[2] = 8;
edades[3] = 90;
edades[4] = 65;
for (int i = 0; i < edades.length; i++) {
System.out.println(edades[i]);
}
int[] precios = { 20, 30, 50, 18 };
System.out.println(precios[2]);
precios = new int[5];
int[] fibonacci = new int[10];
fibonacci[0] = 1;
fibonacci[1] = 1;
for (int i = 2; i < fibonacci.length; i++) {
fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
}
System.out.println(Arrays.toString(fibonacci));
// foreach
for (int numero : fibonacci) {
System.out.println(numero);
}
System.out.println(fibonacci);
printArray(fibonacci);
int[] inverso=reverseArray(fibonacci);
System.out.println(Arrays.toString(inverso));
int[] otro=printArrayDuplicado(fibonacci);
System.out.println(Arrays.toString(fibonacci));
int a=90;
int b=a;
a=25;
int[] pepe=fibonacci.clone();
int[] nuevo=Arrays.copyOf(fibonacci,fibonacci.length);
System.out.println(doble(a));
System.out.println(a);
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static int[] reverseArray(int[] arr) {
int[] result = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
result[i] = arr[arr.length - i - 1];
}
return result;
}
public static int[] printArrayDuplicado(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]*=2; // NO HACER NUNCA
}
return arr;
}
public static int doble(int numero) {
numero*=2;
return numero;
}
Más ejercicios cadenas resueltos
static int contarLetra(String cadena, char letra) {
int total = 0;
for (int i = 0; i < cadena.length(); i++) {
if (cadena.charAt(i) == letra) {
total++;
}
}
return total;
}
static int contarVocales(String cadena) {
cadena = quitarAcentos(cadena.toLowerCase());
String vocales = "aeiou";
int total = 0;
for (int i = 0; i < vocales.length(); i++) {
total += contarLetra(cadena, vocales.charAt(i));
}
return total;
}
static String sinEspacios(String cadena) {
cadena = cadena.trim();
while (cadena.indexOf(" ") != -1) {
cadena = cadena.replace(" ", " ");
}
return cadena;
}
static int contarChar(String cadena, char letra) {
int total = 0;
for (int i = 0; i < cadena.length(); i++) {
if (cadena.charAt(i) == letra) {
total++;
}
}
return total;
}
static String eliminar(String cadena, String cadenaEliminar) {
return cadena.replace(cadenaEliminar, "");
}
static String cambiar(String cadena, char antiguo, char nuevo) {
return cadena.replace(antiguo, nuevo);
}