Partilhar: WhatsApp
aulify
UC UC00619 · T. Desenv. Software

Ficha 01 · Java fundamentos

Sintaxe, OOP, colecções
Versão · Aluno
Tempo · 45 minutos
Aluno(a)
Turma
Data

Exercício 1 · Hello World e variáveis

Cria uma classe Apresentacao que peça ao utilizador o nome e a idade, e responda com "Olá, [nome]. Daqui a 10 anos terás [idade+10] anos.".

Resposta:
import java.util.Scanner;

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

        System.out.print("Nome: ");
        String nome = sc.nextLine();

        System.out.print("Idade: ");
        int idade = sc.nextInt();

        System.out.println("Olá, " + nome + ". Daqui a 10 anos terás " + (idade + 10) + " anos.");

        sc.close();
    }
}

Exercício 2 · Tabuada

Cria um programa que peça um número n ao utilizador e imprima a tabuada de 1 a 10 desse número.

Resposta:
import java.util.Scanner;

public class Tabuada {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Número: ");
        int n = sc.nextInt();

        for (int i = 1; i <= 10; i++) {
            System.out.println(n + " x " + i + " = " + (n * i));
        }

        sc.close();
    }
}

Exercício 3 · Classe Carro

Cria a classe Carro com atributos marca, modelo, ano (todos privados). Construtor que recebe os 3, getters, e método descrever() que imprime tudo formatado. Cria 2 carros no main e descreve-os.

Resposta:
public class Carro {
    private String marca;
    private String modelo;
    private int ano;

    public Carro(String marca, String modelo, int ano) {
        this.marca = marca;
        this.modelo = modelo;
        this.ano = ano;
    }

    public String getMarca() { return marca; }
    public String getModelo() { return modelo; }
    public int getAno() { return ano; }

    public void descrever() {
        System.out.println(marca + " " + modelo + " (" + ano + ")");
    }

    public static void main(String[] args) {
        Carro c1 = new Carro("Toyota", "Corolla", 2022);
        Carro c2 = new Carro("Tesla", "Model 3", 2024);

        c1.descrever();
        c2.descrever();
    }
}

Exercício 4 · Conta bancária

Cria a classe ContaBancaria com titular (String) e saldo (double). Métodos: depositar(double), levantar(double) (lança IllegalArgumentException se saldo insuficiente), getSaldo(). Testa no main.

Resposta:
public class ContaBancaria {
    private String titular;
    private double saldo;

    public ContaBancaria(String titular, double saldoInicial) {
        this.titular = titular;
        this.saldo = saldoInicial;
    }

    public void depositar(double valor) {
        if (valor <= 0) {
            throw new IllegalArgumentException("Valor deve ser positivo");
        }
        saldo += valor;
    }

    public void levantar(double valor) {
        if (valor <= 0) {
            throw new IllegalArgumentException("Valor deve ser positivo");
        }
        if (valor > saldo) {
            throw new IllegalArgumentException("Saldo insuficiente: " + saldo + "€");
        }
        saldo -= valor;
    }

    public double getSaldo() { return saldo; }
    public String getTitular() { return titular; }

    public static void main(String[] args) {
        ContaBancaria c = new ContaBancaria("Ana", 100.0);
        c.depositar(50);
        c.levantar(30);
        System.out.println("Saldo: " + c.getSaldo() + "€");

        try {
            c.levantar(1000);
        } catch (IllegalArgumentException e) {
            System.out.println("Erro: " + e.getMessage());
        }
    }
}

Exercício 5 · Herança — ContaPoupanca

Cria a classe ContaPoupanca extends ContaBancaria que adiciona método aplicarJuros(double taxa) que multiplica o saldo por (1 + taxa). Como o saldo é private no pai, precisas adicionar protected void setSaldo(double s) na classe mãe ou método na própria filha que use depositar.

Resposta:
public class ContaPoupanca extends ContaBancaria {

    public ContaPoupanca(String titular, double saldoInicial) {
        super(titular, saldoInicial);
    }

    public void aplicarJuros(double taxa) {
        if (taxa < 0) {
            throw new IllegalArgumentException("Taxa não pode ser negativa");
        }
        double juros = getSaldo() * taxa;
        depositar(juros);
    }

    public static void main(String[] args) {
        ContaPoupanca cp = new ContaPoupanca("Bruno", 1000);
        cp.aplicarJuros(0.05);  // 5%
        System.out.println("Saldo após juros: " + cp.getSaldo() + "€");
        // 1050.0
    }
}

Usa depositar() (método público herdado) para somar os juros — assim respeita o encapsulamento.

Exercício 6 · Lista de compras

Usa um ArrayList<String> para gerir uma lista de compras. Adiciona 5 items, remove 2 pelo índice, imprime quantos sobram e percorre a lista com foreach.

Resposta:
import java.util.ArrayList;
import java.util.List;

public class ListaCompras {
    public static void main(String[] args) {
        List<String> lista = new ArrayList<>();
        lista.add("Pão");
        lista.add("Leite");
        lista.add("Ovos");
        lista.add("Manteiga");
        lista.add("Queijo");

        lista.remove(0);   // remove "Pão"
        lista.remove(1);   // remove "Ovos" (agora índice 1)

        System.out.println("Items restantes: " + lista.size());

        for (String item : lista) {
            System.out.println("- " + item);
        }
    }
}

Exercício 7 · Contador de palavras (Map)

Dado um texto, conta quantas vezes cada palavra aparece, usando HashMap<String, Integer>. Imprime o resultado.

Exemplo:

texto = "a casa é grande a casa é bonita"
→ a:2 casa:2 é:2 grande:1 bonita:1
Resposta:
import java.util.HashMap;
import java.util.Map;

public class Contador {
    public static void main(String[] args) {
        String texto = "a casa é grande a casa é bonita";
        String[] palavras = texto.split(" ");

        Map<String, Integer> contagem = new HashMap<>();

        for (String p : palavras) {
            contagem.merge(p, 1, Integer::sum);
            // ou:
            // contagem.put(p, contagem.getOrDefault(p, 0) + 1);
        }

        for (Map.Entry<String, Integer> e : contagem.entrySet()) {
            System.out.println(e.getKey() + ": " + e.getValue());
        }
    }
}

Exercício 8 · Interface Forma

Cria a interface Forma com método double area(). Implementa em Circulo (raio) e Rectangulo (largura, altura). Cria um List<Forma> com 3 formas e imprime a área total.

Resposta:
import java.util.List;

interface Forma {
    double area();
}

class Circulo implements Forma {
    private double raio;
    public Circulo(double raio) { this.raio = raio; }
    @Override
    public double area() { return Math.PI * raio * raio; }
}

class Rectangulo implements Forma {
    private double largura, altura;
    public Rectangulo(double l, double a) {
        this.largura = l;
        this.altura = a;
    }
    @Override
    public double area() { return largura * altura; }
}

public class TestForma {
    public static void main(String[] args) {
        List<Forma> formas = List.of(
            new Circulo(5),
            new Rectangulo(3, 4),
            new Circulo(2)
        );

        double total = 0;
        for (Forma f : formas) {
            total += f.area();
        }

        System.out.printf("Área total: %.2f%n", total);

        // Versão com streams:
        double soma = formas.stream()
            .mapToDouble(Forma::area)
            .sum();
        System.out.printf("Com streams: %.2f%n", soma);
    }
}