Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Días hábiles

Primero se crea la clase Dias:


public class Dias {
    private String dia;
    private String finDeSemana[] = {"sábado", "domingo"};
    private String diasHabiles[] = {"lunes","martes","miércoles","jueves","viernes"};

    public void setDia(String dia) {
        this.dia = dia;
    }

    private boolean estaEn(String[] dias, String dia){
        return Arrays.stream(dias).anyMatch(dia.toLowerCase()::equals);
    }

    private String elDia(String dia){
        return dia.toUpperCase(Locale.ROOT).charAt(0) + dia.substring(1);
    }

    public void  diaHabil() {
        if (estaEn(diasHabiles, dia)) {
            System.out.println(elDia(dia) + " es un día hábil.");

        } else if (estaEn(finDeSemana, dia)) {
            System.out.println(elDia(dia) + " no es un día hábil.");

        } else {
            System.out.println("Día desconconocido (ten en cuenta que es necesario los acentos en los días).");
        }
    }

}

Luego se crea la clase Main:


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

        Dias dia = new Dias();
        System.out.println("Ingresa un día");
        dia.setDia(teclado.next());
        dia.diaHabil();
    }
}
1 respuesta

Hola Aldo, espero que estés bien

Tu implementación para verificar si un día es hábil o no parece estar bien estructurada. Estás utilizando un enfoque correcto al comparar el día ingresado por el usuario con las listas de días hábiles y fines de semana. Sin embargo, hay un par de detalles que podrías ajustar para asegurarte de que el programa funcione como esperas:

  1. Uso de acentos: Asegúrate de que los días que ingresas en el array diasHabiles y finDeSemana incluyan los acentos, ya que el programa distingue entre "miercoles" y "miércoles".

  2. Capitalización del primer carácter: En el método elDia, al capitalizar el primer carácter, asegúrate de que el resto de la palabra se mantenga en minúsculas. Actualmente, el método puede no funcionar correctamente si el input no está en minúsculas. Aquí tienes un pequeño ajuste:

    private String elDia(String dia) {
        return dia.substring(0, 1).toUpperCase() + dia.substring(1).toLowerCase();
    }
    
  3. Importación de Arrays: No olvides importar java.util.Arrays para que el método anyMatch funcione correctamente.

Aquí tienes un ejemplo de cómo debería verse tu código con las correcciones:

import java.util.Arrays;
import java.util.Locale;
import java.util.Scanner;

public class Dias {
    private String dia;
    private String finDeSemana[] = {"sábado", "domingo"};
    private String diasHabiles[] = {"lunes", "martes", "miércoles", "jueves", "viernes"};

    public void setDia(String dia) {
        this.dia = dia;
    }

    private boolean estaEn(String[] dias, String dia) {
        return Arrays.stream(dias).anyMatch(dia.toLowerCase()::equals);
    }

    private String elDia(String dia) {
        return dia.substring(0, 1).toUpperCase() + dia.substring(1).toLowerCase();
    }

    public void diaHabil() {
        if (estaEn(diasHabiles, dia)) {
            System.out.println(elDia(dia) + " es un día hábil.");
        } else if (estaEn(finDeSemana, dia)) {
            System.out.println(elDia(dia) + " no es un día hábil.");
        } else {
            System.out.println("Día desconocido (ten en cuenta que es necesario los acentos en los días).");
        }
    }
}

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

        Dias dia = new Dias();
        System.out.println("Ingresa un día");
        dia.setDia(teclado.next());
        dia.diaHabil();
    }
}

Espero que estos ajustes te ayuden a resolver el problema. ¡Espero haber ayudado y buenos estudios!