En aquest tema, aprendrem a desenvolupar una aplicació de consola en Java. Les aplicacions de consola són programes que s'executen en una interfície de línia de comandes (CLI) i interactuen amb l'usuari a través de text. Aquest tipus d'aplicacions són ideals per a tasques automatitzades, scripts i eines de desenvolupament.

Objectius del Tema

  • Comprendre els conceptes bàsics d'una aplicació de consola.
  • Aprendre a llegir i escriure dades a la consola.
  • Desenvolupar una aplicació de consola completa amb funcionalitats bàsiques.

Conceptes Bàsics

  1. Entrada i Sortida de la Consola

Per interactuar amb l'usuari a través de la consola, utilitzarem les classes Scanner per a la lectura d'entrada i System.out per a la sortida.

Lectura d'Entrada

import java.util.Scanner;

public class EntradaConsola {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Introdueix el teu nom: ");
        String nom = scanner.nextLine();
        System.out.println("Hola, " + nom + "!");
    }
}

Explicació:

  • Scanner scanner = new Scanner(System.in);: Crea un objecte Scanner per llegir l'entrada de la consola.
  • scanner.nextLine();: Llegeix una línia de text de la consola.
  • System.out.println("Hola, " + nom + "!");: Mostra un missatge a la consola.

Sortida de Dades

public class SortidaConsola {
    public static void main(String[] args) {
        System.out.println("Aquest és un missatge de sortida.");
    }
}

Explicació:

  • System.out.println("Aquest és un missatge de sortida.");: Mostra un missatge a la consola.

Desenvolupament d'una Aplicació de Consola Completa

  1. Definició del Problema

Desenvoluparem una aplicació de consola que gestioni una llista de tasques. L'usuari podrà afegir, eliminar i veure les tasques.

  1. Estructura del Programa

El programa tindrà les següents funcionalitats:

  • Mostrar el menú principal.
  • Afegir una tasca.
  • Eliminar una tasca.
  • Veure totes les tasques.
  • Sortir del programa.

  1. Implementació

Classe Principal

import java.util.ArrayList;
import java.util.Scanner;

public class GestorTasques {
    private static ArrayList<String> tasques = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        boolean sortir = false;
        while (!sortir) {
            mostrarMenu();
            int opcio = scanner.nextInt();
            scanner.nextLine(); // Consumir la nova línia
            switch (opcio) {
                case 1:
                    afegirTasca();
                    break;
                case 2:
                    eliminarTasca();
                    break;
                case 3:
                    veureTasques();
                    break;
                case 4:
                    sortir = true;
                    break;
                default:
                    System.out.println("Opció no vàlida. Si us plau, tria una altra opció.");
            }
        }
    }

    private static void mostrarMenu() {
        System.out.println("\nGestor de Tasques");
        System.out.println("1. Afegir Tasca");
        System.out.println("2. Eliminar Tasca");
        System.out.println("3. Veure Tasques");
        System.out.println("4. Sortir");
        System.out.print("Tria una opció: ");
    }

    private static void afegirTasca() {
        System.out.print("Introdueix la tasca: ");
        String tasca = scanner.nextLine();
        tasques.add(tasca);
        System.out.println("Tasca afegida.");
    }

    private static void eliminarTasca() {
        System.out.print("Introdueix el número de la tasca a eliminar: ");
        int index = scanner.nextInt();
        scanner.nextLine(); // Consumir la nova línia
        if (index >= 0 && index < tasques.size()) {
            tasques.remove(index);
            System.out.println("Tasca eliminada.");
        } else {
            System.out.println("Número de tasca no vàlid.");
        }
    }

    private static void veureTasques() {
        System.out.println("\nLlista de Tasques:");
        for (int i = 0; i < tasques.size(); i++) {
            System.out.println(i + ". " + tasques.get(i));
        }
    }
}

Explicació:

  • ArrayList<String> tasques: Emmagatzema la llista de tasques.
  • Scanner scanner: Llegeix l'entrada de l'usuari.
  • mostrarMenu(): Mostra el menú principal.
  • afegirTasca(): Afegeix una nova tasca a la llista.
  • eliminarTasca(): Elimina una tasca de la llista.
  • veureTasques(): Mostra totes les tasques.

Exercicis Pràctics

Exercici 1: Afegir Validació

Modifica el programa per validar que l'usuari introdueixi un número vàlid quan elimina una tasca.

Exercici 2: Afegir Funcionalitat de Modificació

Afegeix una nova opció al menú per permetre a l'usuari modificar una tasca existent.

Exercici 3: Guardar i Carregar Tasques

Modifica el programa per guardar les tasques en un fitxer i carregar-les quan el programa s'inicia.

Solucions

Solució a l'Exercici 1

private static void eliminarTasca() {
    System.out.print("Introdueix el número de la tasca a eliminar: ");
    int index = scanner.nextInt();
    scanner.nextLine(); // Consumir la nova línia
    if (index >= 0 && index < tasques.size()) {
        tasques.remove(index);
        System.out.println("Tasca eliminada.");
    } else {
        System.out.println("Número de tasca no vàlid.");
    }
}

Solució a l'Exercici 2

private static void modificarTasca() {
    System.out.print("Introdueix el número de la tasca a modificar: ");
    int index = scanner.nextInt();
    scanner.nextLine(); // Consumir la nova línia
    if (index >= 0 && index < tasques.size()) {
        System.out.print("Introdueix la nova tasca: ");
        String novaTasca = scanner.nextLine();
        tasques.set(index, novaTasca);
        System.out.println("Tasca modificada.");
    } else {
        System.out.println("Número de tasca no vàlid.");
    }
}

Afegeix aquesta opció al menú:

case 5:
    modificarTasca();
    break;

Solució a l'Exercici 3

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class GestorTasques {
    private static ArrayList<String> tasques = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in);
    private static final String FITXER_TASQUES = "tasques.txt";

    public static void main(String[] args) {
        carregarTasques();
        boolean sortir = false;
        while (!sortir) {
            mostrarMenu();
            int opcio = scanner.nextInt();
            scanner.nextLine(); // Consumir la nova línia
            switch (opcio) {
                case 1:
                    afegirTasca();
                    break;
                case 2:
                    eliminarTasca();
                    break;
                case 3:
                    veureTasques();
                    break;
                case 4:
                    sortir = true;
                    guardarTasques();
                    break;
                default:
                    System.out.println("Opció no vàlida. Si us plau, tria una altra opció.");
            }
        }
    }

    private static void mostrarMenu() {
        System.out.println("\nGestor de Tasques");
        System.out.println("1. Afegir Tasca");
        System.out.println("2. Eliminar Tasca");
        System.out.println("3. Veure Tasques");
        System.out.println("4. Sortir");
        System.out.print("Tria una opció: ");
    }

    private static void afegirTasca() {
        System.out.print("Introdueix la tasca: ");
        String tasca = scanner.nextLine();
        tasques.add(tasca);
        System.out.println("Tasca afegida.");
    }

    private static void eliminarTasca() {
        System.out.print("Introdueix el número de la tasca a eliminar: ");
        int index = scanner.nextInt();
        scanner.nextLine(); // Consumir la nova línia
        if (index >= 0 && index < tasques.size()) {
            tasques.remove(index);
            System.out.println("Tasca eliminada.");
        } else {
            System.out.println("Número de tasca no vàlid.");
        }
    }

    private static void veureTasques() {
        System.out.println("\nLlista de Tasques:");
        for (int i = 0; i < tasques.size(); i++) {
            System.out.println(i + ". " + tasques.get(i));
        }
    }

    private static void guardarTasques() {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(FITXER_TASQUES))) {
            for (String tasca : tasques) {
                writer.write(tasca);
                writer.newLine();
            }
        } catch (IOException e) {
            System.out.println("Error en guardar les tasques: " + e.getMessage());
        }
    }

    private static void carregarTasques() {
        try (BufferedReader reader = new BufferedReader(new FileReader(FITXER_TASQUES))) {
            String tasca;
            while ((tasca = reader.readLine()) != null) {
                tasques.add(tasca);
            }
        } catch (IOException e) {
            System.out.println("Error en carregar les tasques: " + e.getMessage());
        }
    }
}

Conclusió

En aquest tema, hem après a desenvolupar una aplicació de consola en Java. Hem cobert els conceptes bàsics d'entrada i sortida de la consola, i hem implementat una aplicació completa per gestionar una llista de tasques. A més, hem proporcionat exercicis pràctics per reforçar els conceptes apresos i hem ofert solucions detallades per a cada exercici. Amb aquests coneixements, estàs preparat per crear les teves pròpies aplicacions de consola en Java.

Curs de Programació en Java

Mòdul 1: Introducció a Java

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

Mòdul 4: Programació Orientada a Objectes Avançada

Mòdul 5: Estructures de Dades i Col·leccions

Mòdul 6: Gestió d'Excepcions

Mòdul 7: Entrada/Sortida de Fitxers

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats