Ficha 01 · Java fundamentos
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);
}
}