Aquí tenéis una propuesta de ejercicios con listas en Java para practicar lo explicado en el post de listas. Hay varias soluciones posibles para resolver un mismo problema, unas más eficientes que otras. Aquí podéis ver una solución posible para cada ejercicio propuesto.
Ejercicio 1: ListaNumerosDivisiblesPorNum
Enunciado:
Crea una lista de todos los números del 1 a 100 que sean divisibles por un número que introduzca el usuario. Este número tiene que estar comprendido entre 2 y 7. Pinta la lista por pantalla.
Solución:
- Una posible solución sería:
import java.util.ArrayList;
import java.util.Scanner;
public class ListaNumDivPorNum {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int div;
do{
System.out.println("Introduce un número entero comprendido entre 2 y 7");
div=sc.nextInt();
}while(div<2 || div >7);
ArrayList<Integer> numeros = new ArrayList<Integer>();
for (int i=div;i<101;i=i+div){
numeros.add(i);
}
System.out.println("La lista de numeros del 1 al 100 divisible por "+div+" es:");
System.out.println(numeros);
}
}
- Otra posible solución, empleando el operador resto (%), sería:
import java.util.ArrayList;
import java.util.Scanner;
public class ListaNumDivPorNum_v2 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int div;
do{
System.out.println("Introduce un número entero comprendido entre 2 y 7");
div=sc.nextInt();
}while(div<2 || div >7);
ArrayList<Integer> numeros = new ArrayList<>();
for (int i=1;i<101;i++){
if (i%div==0){
numeros.add(i);
}
}
System.out.println("La lista de numeros del 1 al 100 divisible por "+div+" es:");
System.out.println(numeros);
}
}
Ejercicio 2: OrdenarFiltrarLista
Enunciado:
Crea una lista de enteros que tenga 10 números. La lista estará hardcodeada, con los números que quieras.
El programa tiene que ordenar la lista y presentarla por pantalla.
Luego pide al usuario que introduzca un límite inferior y otro superior. Entonces el programa elimina todos los elementos de la lista que estén fuera de los límites, incluyendo estos. Y presenta los resultados por pantalla.
Solución:
- Una posible solución:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class OrdenarFiltrarLista {
public static void main(String[] args) {
ArrayList<Integer> listaNumeros = new ArrayList<Integer>();
listaNumeros.add(51);
listaNumeros.add(32);
listaNumeros.add(79);
listaNumeros.add(1);
listaNumeros.add(47);
listaNumeros.add(33);
listaNumeros.add(49);
listaNumeros.add(65);
listaNumeros.add(107);
listaNumeros.add(82);
Collections.sort(listaNumeros);
System.out.println("Lista ordenada: " + listaNumeros);
Scanner sc = new Scanner(System.in);
System.out.print("Introduce el límite inferior: ");
int limiteInferior = sc.nextInt();
System.out.print("Introduce el límite superior: ");
int limiteSuperior = sc.nextInt();
for (int i = 0; i < listaNumeros.size(); i++) {
int numero = listaNumeros.get(i);
if (numero < limiteInferior || numero > limiteSuperior) {
listaNumeros.remove(i);
i--;
}
}
System.out.println("Lista final: " + listaNumeros);
}
}
Ejercicio 3: TallerReparacion
Enunciado:
Tenemos un taller de reparación de coches y queremos realizar un programa con el que gestionar los coches que entran, salen y están en el taller.
Los datos de cada coche que queremos registrar son: propietario, matricula, marca y si está reparado.
Las opciones que queremos dar son:
1.- Entrada nueva reparación: Se registran todos los datos del coche que se recepciona. Se recepciona como reparado = false
2.- Salida de coche reparado: Se busca el coche en el taller por el nombre de propietario. Localizado el coche, se cambia a reparado = true y se entrega al propietario, saliendo del taller
3.- Listado de vehículos: Se listan todos los vehículos en el taller, mostrando todos los parámetros
4.- Salir: salir del programa
Solución:
Un posible código solución sería:
- La clase Coche:
public class Coche {
private String propietario;
private String matricula;
private String marca;
private boolean reparado;
public Coche(String propietario, String matricula, String marca, boolean reparado) {
this.propietario = propietario;
this.matricula = matricula;
this.marca = marca;
this.reparado = reparado;
}
@Override
public String toString() {
return "Coche{" + "propietario=" + propietario + ", matricula=" + matricula + ", marca=" + marca + ", reparado=" + reparado + '}';
}
public String getPropietario() {
return propietario;
}
public void setPropietario(String propietario) {
this.propietario = propietario;
}
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public boolean isReparado() {
return reparado;
}
public void setReparado(boolean reparado) {
this.reparado = reparado;
}
}
- Y el programa principal sería:
import java.util.ArrayList;
import java.util.Scanner;
public class TallerReparacion {
public static void main(String[] args) {
boolean salir = false;
int eleccion = 0;
ArrayList<Coche>coches = new ArrayList<>();
Coche cocheEntregado = null;
while(!salir){
presentarMenus();
eleccion=introducirOpcion();
switch (eleccion){
case 1:
coches.add(introducirCoche());
break;
case 2:
cocheEntregado=salidaCoche(coches);
if (cocheEntregado!=null){
coches.remove(cocheEntregado);
}
break;
case 3:
listadoCoches(coches);
break;
case 4:
salir=true;
break;
}
}
}
public static void presentarMenus(){
System.out.println("------------------------");
System.out.println("PROGRAMA GESTIÓN TALLER");
System.out.println("------------------------");
System.out.println("1.- Entrada nueva reparación");
System.out.println("2.- Salida de coche reparado");
System.out.println("3.- Listado de vehículos");
System.out.println("4.- Salir");
}
public static int introducirOpcion(){
boolean valida= false;
int opcion=0;
Scanner entrada = new Scanner(System.in);
System.out.println("Introduce la opción deseada");
while(!valida){
opcion = entrada.nextInt();
if (opcion>0 && opcion<5){
valida=true;
}else{
System.out.println("OPCION INCORRECTA");
System.out.println("La opción elegida tiene que estar entre 1 y 4");
System.out.println("Por favor, introduce opción correcta");
}
}
return opcion;
}
public static Coche introducirCoche(){
String propietario, matricula, marca;
boolean reparado;
Scanner lec1 = new Scanner(System.in);
Scanner lec2 = new Scanner(System.in);
Scanner lec3 = new Scanner(System.in);
System.out.println("Introduce el propietario del vehículo:");
propietario = lec1.nextLine();
System.out.println("Introduce la matricula del vehículo:");
matricula = lec2.nextLine();
System.out.println("Introduce la marca del vehículo:");
marca = lec3.nextLine();
return new Coche(propietario, matricula, marca, false);
}
public static void listadoCoches(ArrayList<Coche>listaCoches){
if (listaCoches.isEmpty()){
System.out.println("No hay coches en el taller");
}else{
for (Coche coche: listaCoches){
System.out.println(coche.toString());
}
}
}
public static Coche salidaCoche (ArrayList<Coche>listaCoches){
System.out.println("Introduce nombre propietario del coche a entregar:");
boolean encontrado=false;
Scanner ent = new Scanner(System.in);
String prop = ent.nextLine();
for (Coche coche: listaCoches){
if (coche.getPropietario().equals(prop)){
System.out.println("Coche Entregado: "+coche.toString());
coche.setReparado(true);
encontrado=true;
return coche;
}
}
if (!encontrado){
System.out.println("Coche NO encontrado");
}
return null;
}
}
NOTA: Este post es parte de la colección “Java”. Puedes ver el índice de esta colección aquí.