1
resposta

[Projeto] Resolução do desafio "Controle de dispositivos"

public interface Controlavel {
    void ligar();
    void desligar();
}
public class Luz implements Controlavel {
    private boolean ligado = false;

    @Override
    public void ligar() {
        if (!ligado) {
            ligado = true;
            System.out.println("Luz ligada.");
        } else {
            System.out.println("Luz já está ligada.");
        }
    }

    @Override
    public void desligar() {
        if (ligado) {
            ligado = false;
            System.out.println("Luz desligada.");
        } else {
            System.out.println("Luz já está desligada.");
        }
    }
}
public class ArCondicionado implements Controlavel {
    private boolean ligado = false;

    @Override
    public void ligar() {
        if (!ligado) {
            ligado = true;
            System.out.println("Ar-condicionado ligado.");
        } else {
            System.out.println("Ar-condicionado já está ligado.");
        }
    }

    @Override
    public void desligar() {
        if (ligado) {
            ligado = false;
            System.out.println("Ar-condicionado desligado.");
        } else {
            System.out.println("Ar-condicionado já está desligado.");
        }
    }
}
import java.util.Scanner;

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

        do {
            System.out.println("Deseja ligar/desligar algum dispositivo (sim/não)? ");
            String entrada = scanner.nextLine();

            if (entrada.equalsIgnoreCase("sim")) {
                System.out.println("Escolha um dispositivo para ligar/desligar (1 - luz / 2 - ar-condicionado): ");
                int dispositivo = scanner.nextInt();
                scanner.nextLine();

                if (dispositivo == 1) {
                    System.out.println("Deseja ligar ou desligar esse dispositivo? ");
                    String comando = scanner.nextLine();

                    if (comando.equalsIgnoreCase("ligar")) {
                        luz.ligar();
                    } else if (comando.equalsIgnoreCase("desligar")) {
                        luz.desligar();
                    }
                } else if (dispositivo == 2) {
                    System.out.println("Você deseja ligar ou desligar esse dispositivo? ");
                    String comando = scanner.nextLine();

                    if (comando.equalsIgnoreCase("ligar")) {
                        ar.ligar();
                    } else if (comando.equalsIgnoreCase("desligar")) {
                        ar.desligar();
                    }
                }
            } else if (entrada.equalsIgnoreCase("não")) {
                System.out.println("Encerrando sistema...");
                break;
            }
        } while (true);

        scanner.close();
    }
}
1 resposta

Oi, Lucas! Como vai?

Gostei da forma como você organizou a solução com a interface Controlavel e aplicou heranca, polimorfismo e interfaces de um jeito bem claro. Sua estrutura ficou coerente, porque cada classe cuida do próprio comportamento de ligar() e desligar(), o que deixa o projeto mais fácil de entender e manter.

Uma dica interessante para o futuro é usar um método para evitar repetição no Main, deixando o código mais enxuto. Veja este exemplo:


public static void executarComando(Controlavel dispositivo, String comando) {
    if (comando.equalsIgnoreCase("ligar")) {
        dispositivo.ligar();
    } else if (comando.equalsIgnoreCase("desligar")) {
        dispositivo.desligar();
    }
}

Neste exemplo, o método recebe um objeto do tipo Controlavel e executa o comando informado, ajudando a reutilizar a mesma lógica para diferentes dispositivos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!