Ejercicios con arrays en Java

Última actualización: octubre 2024

En este post, os propongo algunos ejercicios con arrays en Java para practicar lo explicado en el post anterior en el que contaba como trabajar con los arrays. Como siempre digo, existen 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: Numero veces letra en texto

Escribe un programa que pida al usuario que introduzca un texto y una letra. Después el programa tiene que calcular y presentar por pantalla, cuantas veces aparece la letra en el texto.

Pista: Un string es un array de caracteres. Para acceder a un elemento del string, usa la función chartAt(posición). Por ejemplo. Si el string es “Hola Mundo”, con la sentencia text.charAt(3), recuperamos el carácter ‘a’. Recuerda que las posiciones empiezan en 0.

Una posible solución sería:

import java.util.Scanner;

public class LetraEnTexto {
    
    public static void main(String[] args) {
      Scanner lector1=new Scanner(System.in);
      Scanner lector2=new Scanner(System.in);
      System.out.println("introduce un texto:");
      String txt = lector1.nextLine();
      System.out.println("introduce una letra:");
      String ch = lector2.next();
      int len = txt.length();
      int cont=0;
      for (int i=0;i<len;i++){
          if (txt.charAt(i)==ch.charAt(0)){
              cont++;
          }
      }
    System.out.println("La letra "+ch.charAt(0)+" aparece "+cont+" veces");
    lector1.close();
    lector2.close();
    }
}

En este caso, presento una segunda opción, trabajando con el tipo char:

import java.util.Scanner;

public class LetraEnTexto_v2 {

    public static void main(String[] args) {
      Scanner lector1=new Scanner(System.in);
      Scanner lector2=new Scanner(System.in);
      System.out.println("introduce un texto:");
      String txt = lector1.nextLine();
      System.out.println("introduce una letra:");
      String ch = lector2.next();
      
      int len = txt.length();
      int cont=0;
      char letra=ch.charAt(0);
      char c;
      for (int i=0;i<len;i++){
          c=txt.charAt(i);
          if (c==letra){
              cont++;
          }
      }
    System.out.println("La letra "+ letra +" aparece "+cont+" veces");
    lector1.close(); lector2.close();
    }
}

Ejercicio 2: Introducir facturas

Escribe un programa que pida al usuario que introduzca los datos de una factura y luego los presente por pantalla.

  • La factura tendrá tres partes. La cabecera, el listado de productos con sus datos, y el pie de factura con el total de la misma.
  • La cabecera tendrá la siguiente información: Producto, unidades, precio/unidad y total.
  • Le pediremos al usuario que introduzca los datos anteriores para tres productos. Por lo que el cuerpo de la factura tendrá 3 líneas.

Un ejemplo de posible factura impresa sería:

  _______________________________________
  Producto ---Unidades ---Precio/unidad ---Total
  _______________________________________
  Mesa---7---101.0---707.0
  Silla---3---45.0---135.0
  Lampara---11---9.0---99.0
  _______________________________________
  Total: 941.0

Y una posible solución sería:

import java.util.Scanner;
public class Factura {
    public static void main(String args[]) {
        Scanner sc1 = new Scanner(System.in);
        Scanner sc2 = new Scanner(System.in);
        Scanner sc3 = new Scanner(System.in);
        String[] productos = new String[3];
        int[] unidades= new int[3];
        double[] precios= new double[3];
        for (int i=1;i<4;i++){
            System.out.println("Introduce el producto "+i);
            productos[i-1] = sc1.nextLine();
            System.out.println("Introduce las unidades de producto "+i);
            unidades[i-1] = sc2.nextInt();
            System.out.println("Introduce el precio por unidad del producto "+i);
            precios[i-1] = sc3.nextDouble();
        }
        System.out.println(" ");
        System.out.println("_______________________________________");
        System.out.println("Producto ---Unidades ---Precio/unidad ---Total");
        System.out.println("_______________________________________");
        double total=0.0;
        for (int i=1;i<4;i++){
            System.out.print(productos[i-1]+"---"+unidades[i-1]+"---"+precios[i-1]+"---"+unidades[i-1]*precios[i-1]+"\n");
            total = total + (unidades[i-1]*precios[i-1]);
        }
        System.out.println("_______________________________________");
        System.out.println("Total: "+total);
        sc1.close();sc2.close();sc3.close();
    }
}

Ejercicio 3: Borrar valor en array

Escribe un programa que busque un valor dentro de un array de integers y borre todas sus ocurrencias, reduciendo la dimensión del array. Es decir, no vale con poner cero en el lugar donde encontremos el valor.

El array de integers estará hardcodeado.

El valor a buscar y borrar debe ser introducido por el usuario.

El programa debe mostrar por pantalla el valor borrado, el array inicial y el array final.

Una posible salida sería:

  Introduce el numero que quieres borrar: 
  5
  Elemento a borrar: 5
  Array inicial: 1 - 5 - 9 - 3 - 45 - 23 - 45 - 12 - 87 - 9 - 6 - 5 - 
  Array final  : 1 - 9 - 3 - 45 - 23 - 45 - 12 - 87 - 9 - 

Una posible solución sería:

import java.util.Scanner;

public class BorrarValorDeArray {

    public static void main(String[] args) {
        int[] numeros={1,5,9,3,45,23,45,12,87,9,6,5};
        Scanner lector1 = new Scanner(System.in);
        System.out.println("Introduce el numero que quieres borrar: ");
        int num = lector1.nextInt();
        System.out.println("Elemento a borrar: "+num);
        System.out.print("Array inicial: ");
        printArray (numeros);
        int ocurrencias = 0;
        for (int i=0;i<numeros.length;i++){
            if (numeros[i]==num){
                ocurrencias++;
                for (int j=i;j<numeros.length-1;j++){
                    numeros[j]=numeros[j+1];
                }
            }
        }
        int[] numerosFinal;
        int le = numeros.length-ocurrencias;
        numerosFinal = new int[le];
        for (int i=0;i<le;i++){
            numerosFinal[i]=numeros[i];
        }
        System.out.print("Array final  : ");
        printArray (numerosFinal);
        lector1.close();
    }
    private static void printArray(int n[]){
        for (int i=0;i<n.length;i++){
            System.out.print(n[i]+" - ");
        }
        System.out.print("\n");
    }
}

Ejercicio 4: Notas de estudiantes

Crea un programa que muestre por pantalla la nota de un estudiante, de entre una lista de estudiantes con sus respectivas notas. Estos datos estarían hardcodeados.

El nombre del estudiante lo introduce el usuario por teclado (usa la clase Scanner).

Usa dos arrays, uno para guardar los nombres de los estudiantes, y el otro para guardar las notas de los mismos. Ambos tendrán 5 elementos. Puedes guardar la información relacionada en ambos arrays con el mismo valor del índice. Es decir, si por ejemplo el estudiante Pedro está en la posición 2 del array de estudiantes, su nota estaría en la posición 2 del array de notas.

Para comparar el nombre del estudiante introducido por teclado con los nombres de los estudiantes en el array de estudiantes, puedes usar el método equals de la Clase String.

Una posible solución sería:

import java.util.Scanner;

public class PreguntaNota {

    public static void main(String[] args) {
            String [] estudiantes = {"Pedro","Ana","Roberto","Lucia","Maria"};
    double [] notas = {7.0,2.3,4.5,6.7,5.7};
    Scanner sc=new Scanner(System.in);
    System.out.println("Introduce el nombre de un estudiante: ");
    String estudiante=sc.nextLine();
    for (int i=0;i<5;i++){
        if(estudiantes[i].equals(estudiante)){
            System.out.println("Estudiante "+estudiante+" tiene una nota de "+notas[i]);
            }
        }
    }
}

Ejercicio 5: Invertir valores array

Escribe un programa java que invierta el orden de los valores de un array. Por invertir el orden de los valores de un array, me refiero que el último pasa a ser el primero, el penúltimo el segundo y así sucesivamente.

El array será un array hardcodeado de valores enteros, que puede tener cualquier longitud.

El programa primero dibujara por pantalla los elementos del array en orden y luego los elementos del array invertido.

Una posible salida sería:

  Array inicial: 
  7 - 3 - 4 - 5 - 9 - 11 - 
  Array invertido: 
  11 - 9 - 5 - 4 - 3 - 7 - 

Y una posible solución:

public class InvierteArray {

    public static void main(String[] args) {
        int[] numeros ={7,3,4,5,9,11};
        int longitud = numeros.length;
        //imprimimos el array de partida
        System.out.println("Array inicial: ");
        for (int i=0; i<longitud;i++){
            System.out.print (numeros[i]+" - ");
        }
        System.out.println("\n");
        //Array invertido: imprimiento el array de atras a adelante
        System.out.println("Array invertido: ");
        for (int i=longitud-1; i>=0;i--){
            System.out.print (numeros[i]+" - ");
        }
        System.out.println("\n");
    }
}

Ejercicio 6: Tomar notas menús

Desarrolla un programa java para ser usado por los camareros de un restaurante, que sirva para tomar nota de los menús que los clientes van a tomar.

  • Primer dato a introducir por el camarero es el número de comensales que tendrá que estar en el rango de 1-5, ya que no hay mesas de más de cinco comensales. El valor introducido debe asegurarse de que se encuentra en el rango definido.
  • Entonces el camarero tiene que introducir el menú seleccionado por cada cliente.
  • Tenemos tres menus: #1,#2 y #3. Puedes identificar cada menú por el número: menú 1, menú 2 o menú 3.
  • Una vez introducidos todos los datos, el programa imprimirá por pantalla los menús solicitados por cada comensal.
  • Tienes que emplear un array para registrar los menus que tomará cada comensal. Ten en cuenta que la dimensión de dicho array tendrá que definirse en ejecución, ya que no sabemos a priori cuantos comensales vamos a tener.

Un solución sería:

import java.util.Scanner;

public class Menus {

    public static void main(String[] args) {
              int numeroComensales;
      int[] menus;
      Scanner sc1 = new Scanner(System.in);
      
//introducción del número de comensales
      do{
          System.out.println("Introduce el número de comensales (máximo 5):");
          numeroComensales = sc1.nextInt();
      }while(numeroComensales<1 || numeroComensales>5);
      
//introducción de los menus para cada comensal
      menus = new int[numeroComensales];
      for(int i=0;i<numeroComensales;i++){
          System.out.println("Introduce el menu pedido por el comensal "+(i+1)+" :");
          menus[i]=sc1.nextInt();
      }
      
//dibujando en pantalla los menus tomados por cada comensal
      for (int i= 0; i<numeroComensales;i++){
          System.out.println("Comensal "+(i+1)+" va a tomar el menu "+menus[i]);
      }
    }
}

Ejercicio 7: Palabra con las iniciales de las palabras de un texto

Realiza un programa que pida al usuario que introduzca un texto y cree una palabra con las iniciales de las palabras del texto introducido.

Por ejemplo: texto introducido = “Hay osos libres arriba”, la palabra que tendría que pintar el programa por pantalla sería: “Hola”

NOTA: Recuerda que el método charAt( indice), te devuelve el carácter que se encuentra en la posición marcada por indice. Por ejemplo:

  • String texto = “Hola”
  • texto.charAt(0) sería igual a “H”

Una solución sería:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Introduce un texto: ");
        String texto = scanner.nextLine();

       // Dividir el texto en palabras usando el espacio como delimitador
        String[] palabras = texto.split(" ");

        // Crear la palabra con las iniciales de las palabras del texto
        StringBuilder palabraIniciales = new StringBuilder();
        for (String palabra : palabras) {
            if (!palabra.isEmpty()) { // Ignorar espacios en blanco
                palabraIniciales.append(palabra.charAt(0));
            }
        }
        System.out.println("Palabra con iniciales: " + palabraIniciales);
    }
}

Ejercicio 8: Acertar nombre con pistas letras progresivas

Realiza un programa para acertar el nombre de una persona. Dicho nombre estará hardcodeado (no hay que pedir al usuario que introduzca los datos, sino que los escribimos directamente en el código).

El programa pide al usuario repetidamente que introduzca un nombre hasta que acierte. A cada fallo, el programa da una pista que consiste en mostrar por pantalla las letras del nombre hasta la posición igual al número de fallos que se lleven. Por ejemplo:

  • Nombre = “Eustaquio”
  • 1ª Introducción: “ Elena”  -> fallo -> 1ª pista: “E”
  • 2ª Introducción: “Enrique” ->  fallo -> 2ª pista: “Eu”
  • 3ª Introducción: “Eulalia” -> fallo -> 3ª pista: “Eus”
  • 4ª Introducción: “Eusebio” -> fallo -> 4ª pista: “Eust”
  • 5ª Introducción: “Eustaquio” -> acierto – > fin del programa

NOTA: El método substring( indice1, indice2), devuelve los caracteres comprendidos entre los índices pasados como parámetros. Por ejemplo:

  • String texto = “Hola”
    • texto.substring(0,2) sería igual a “Hol”
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        final String nombre = "Eustaquio";
        Scanner scanner = new Scanner(System.in);
        int intentos = 0;

        System.out.println("¡Adivina el nombre!");

        while (true) {
            System.out.print("Introduce un nombre: ");
            String intento = scanner.nextLine();
            intentos++;

            if (intento.equals(nombre)) {
                System.out.println("¡Correcto! Has adivinado el nombre " + nombre + " en " + intentos + " intentos.");
                break;
            } else {
                if (intentos <= nombre.length()) {
                    String pista = nombre.substring(0, intentos);
                    System.out.println("Pista: " + pista);
                } else {
                    System.out.println("¡Incorrecto! Sigue intentándolo.");
                }
            }
        }
    }
}

Ejercicio 9: Contar vocales de una frase

Realiza un programa que solicite al usuario que introduzca una frase y cuente cuántas vocales hay en ella. El programa debe contar tanto las vocales minúsculas como las mayúsculas.

Por ejemplo:

  • Frase introducida: “Ocho elefantes comen trigo en un trigal”
  • Resultado: 14 vocales

NOTA: Recuerda que el método charAt( indice), te devuelve el carácter que se encuentra en la posición marcada por indice. Por ejemplo:

  • String texto = “Hola”
    • texto.charAt(0) sería igual a “H”
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Introduce una frase: ");
        String frase = scanner.nextLine();

        int contadorVocales = contarVocales(frase);

        System.out.println("Resultado: " + contadorVocales + " vocales");
    }
    public static int contarVocales(String frase) {
        int contador = 0;
        for (int i = 0; i < frase.length(); i++) {
            char caracter = Character.toLowerCase(frase.charAt(i));
            if (caracter == 'a' || caracter == 'e' || caracter == 'i' || caracter == 'o' || caracter == 'u') {
                contador++;
            }
        }
        return contador;
    }
}

NOTA:

Este post es parte de la colección “Java”. Puedes ver el índice de esta colección aquí.

Puedes encontrar más ejercicios para practicar con este tema en el siguiente repositorio de GitHub.

2 comentarios en «Ejercicios con arrays en Java»

  1. Dada un conjunto de personas, ordenadas por la edad, y otro conjunto de personas sin
    ningún orden:
    Se pide:
    1. Realizar una función que inserte las personas sin orden, en el conjunto de personas
    ordenadas por la edad.
    2. Prueben la función. (Se deben ordenar las personas por edad, por medio de las funciones
    realizadas en Pseint) es decir transcribir las funciones de Pseint en java
    3. Los atributos de las personas son : dni,nombre,apellido,edad
    en java en Netbeans. me pueden ayudar con este ejercicio

    1. Podrías seguir los siguientes pasos:
      1.-Definirte una clase Persona con los atributos que manejas.
      2.-Hazte dos listas con los objetos personas, una para cada conjunto, el ordenado y el desordenado.
      3.-Programa el método, al que le pasas ambas listas de personas y te devuelve una lista ordenada con todos las personas.
      Para realizar el método, lo más eficiente que se me ocurre es usar lista enlazas, así puedes incluir fácilmente una persona del conjunto de personas desordenadas en su posición en la lista ordenada.
      Espero que te sirva

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.