Plataforma interativa de console em Java para prática de operadores e lógica de programação — 13 exercícios organizados em 4 categorias com níveis de dificuldade (Básico → Intermediário → Difícil), sistema de menus com switch expressions, exercícios standalone executáveis individualmente, Scanner global com validação robusta (InputMismatchException), testes com captura de stdout/stdin via JUnit 5, cobertura com JaCoCo, análise estática com Checkstyle + SpotBugs + CodeQL, e spell checking com CSpell.
⚠️ Projeto Arquivado Este projeto não recebe mais atualizações ou correções. O código permanece disponível como referência e pode ser utilizado livremente sob a licença MIT. Fique à vontade para fazer fork caso deseje continuar o desenvolvimento.
- Sobre o Projeto
- Funcionalidades
- Tecnologias
- Arquitetura
- Estrutura do Projeto
- Começando
- Scripts Disponíveis
- Testes
- Qualidade e Governança
- FAQ
- Licença
- Contato
Plataforma educacional de console para prática guiada de operadores e lógica de programação em Java. O sistema interativo (SistemaExerciciosCompleto) organiza 13 exercícios em 4 categorias com menus hierárquicos, enquanto cada exercício também possui main() próprio para execução standalone.
O repositório prioriza:
- Sistema interativo com menus hierárquicos —
SistemaExerciciosCompletocomo entry point com 4 submenus (Operadores Básicos, Exercícios Interativos, Conversores, Operadores Especiais), cada um com loop próprio e opção de voltar ao menu principal, usando switch expressions (Java 14+) - Scanner global com validação robusta — Constante
SCANNERcompartilhada com métodos auxiliares (lerOpcao,lerNumero,lerDouble,lerNota,lerBoolean,perguntarContinuar) que tratamInputMismatchExceptione validam ranges, evitando crashes por entrada inválida - 13 exercícios standalone — Cada classe em
exercises/temmain()próprio e pode ser executada independentemente via-Dexec.mainClass, cobrindo desde tipos primitivos até análise numérica avançada - Testes com captura de I/O —
ExercisesTestredirecionaSystem.outparaByteArrayOutputStreameSystem.inparaByteArrayInputStream, validando saída formatada sem mocks externos - Pipeline de qualidade em 4 camadas — CI com Build+Test+JaCoCo, Checkstyle (Google Style adaptado), SpotBugs (análise de bugs), CodeQL (segurança) e CSpell (spell checking de código e docs)
- Média de Duas Notas — Cálculo com
doublee operador de divisão - Casting de Variáveis — Conversão explícita
double→intcom demonstração de perda decimal e char ↔ ASCII - Concatenação — Combinação de
chareStringcom operador+ - Multiplicação de Produtos — Cálculo de total com desconto automático para compras ≥10 unidades
- Tipos Primitivos — Demonstração de
boolean,int,char,byte,long,float,doublecom tabela de bytes e cálculo de IMC
- Comparação Simples — Operadores relacionais (
==,!=,>,<) com análises extras (soma, produto, divisão) e loop de repetição - Média do Aluno — Sistema de notas escolar com 3 bimestres, classificação (Aprovado ≥7 / Recuperação ≥5 / Reprovado <5), boletim formatado e estatísticas (maior/menor nota, variação)
- Análise Completa de Número — Paridade, múltiplos de 3/5/15, comparação com 100, sinal, quadrado/cubo/raiz quadrada
- Conversor de Temperatura — Celsius ↔ Fahrenheit bidirecional com fórmula
F = C × 1.8 + 32 - Conversor Dólar ↔ Real — Conversão bidirecional com cotação informada pelo usuário
- Calculadora de Porcentagem — 3 modos: desconto em produto, acréscimo/juros, porcentagem simples
- Incremento/Decremento — Demonstração interativa de
++var(pré) vsvar++(pós) e--varvsvar--com valor retornado - Operadores Lógicos — Simulador de decisões (
&&,||,!) com entrada do usuário + demonstração teórica com tabela-verdade completa
Dependências: JDK 17+ (switch expressions), JUnit Jupiter 5.10.2 (test), Checkstyle 10.14.0, SpotBugs 4.8.3, JaCoCo 0.8.11. Zero dependências de runtime.
graph TD
subgraph "exercises (pacote único)"
A[SistemaExerciciosCompleto] --> B[Menu Operadores Básicos]
A --> C[Menu Exercícios Interativos]
A --> D[Menu Conversores]
A --> E[Menu Operadores Especiais]
B --> F[MediaNota]
B --> G[CastingDasVariaveis]
B --> H[Concatenacao]
B --> I[Multiplicacao]
B --> J[OperadoresPrimitivos]
C --> K[ComparacaoSimples]
C --> L[MediaAluno]
C --> M[AnaliseNumero]
D --> N[ConversorTemperatura]
D --> O[ConversorDolarReal]
D --> P[Porcentagem]
E --> Q[OperadoresDeIncremento]
E --> R[OperadoresLogicos]
end
| Categoria | Exercícios | Nível |
|---|---|---|
| Operadores Básicos | MediaNota, CastingDasVariaveis, Concatenacao, Multiplicacao, OperadoresPrimitivos | Básico |
| Exercícios Interativos | ComparacaoSimples, MediaAluno, AnaliseNumero | Fácil → Difícil |
| Conversores e Cálculos | ConversorTemperatura, ConversorDolarReal, Porcentagem | Intermediário |
| Operadores Especiais | OperadoresDeIncremento, OperadoresLogicos | Intermediário |
O SistemaExerciciosCompleto (entry point do JAR) contém toda a lógica dos menus e exercícios interativos inline, com métodos auxiliares privados para cada exercício. Os 13 arquivos individuais são versões simplificadas com main() próprio para execução standalone e estudo isolado.
ExercisesOperators/
├── src/
│ ├── main/java/exercises/
│ │ ├── SistemaExerciciosCompleto.java # Entry point — menus + todos os exercícios
│ │ ├── AnaliseNumero.java # Paridade, múltiplos, comparação (standalone)
│ │ ├── CastingDasVariaveis.java # Conversão double → int (standalone)
│ │ ├── ComparacaoSimples.java # Operadores relacionais (standalone)
│ │ ├── Concatenacao.java # char + String (standalone)
│ │ ├── ConversorDolarReal.java # USD → BRL com cotação fixa (standalone)
│ │ ├── ConversorTemperatura.java # Celsius → Fahrenheit (standalone)
│ │ ├── MediaAluno.java # 3 notas → Aprovado/Recuperação/Reprovado (standalone)
│ │ ├── MediaNota.java # Média de 2 notas (standalone)
│ │ ├── Multiplicacao.java # Preço × quantidade (standalone)
│ │ ├── OperadoresDeIncremento.java # ++/-- pré e pós (standalone)
│ │ ├── OperadoresLogicos.java # &&, ||, ! (standalone)
│ │ ├── OperadoresPrimitivos.java # 8 tipos primitivos Java (standalone)
│ │ └── Porcentagem.java # Desconto percentual (standalone)
│ └── test/java/exercises/
│ └── ExercisesTest.java # 16 testes — captura stdout/stdin
├── assets/
│ └── ExercisesOperators.png # Screenshot do sistema
├── .github/
│ ├── workflows/
│ │ ├── ci.yml # Build + Test + JaCoCo + Checkstyle + SpotBugs + CSpell
│ │ └── codeql.yml # Análise de segurança CodeQL (semanal + push)
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── dependabot.yml # Maven + GitHub Actions (semanal, seg 09:00 BRT)
├── config/
│ └── checkstyle.xml # Google Style adaptado (30+ regras)
├── cspell.config.json # Dicionário pt-BR + en + termos do projeto
├── pom.xml # JDK 17, JUnit 5.10.2, JaCoCo 0.8.11, Checkstyle 10.14.0, SpotBugs 4.8.3
├── .editorconfig # UTF-8, LF, indent 4 (Java/XML), indent 2 (YAML/JSON/MD)
├── .gitattributes # LF normalizado + linguist-language=Java
├── CHANGELOG.md # Keep a Changelog (v0.1.0 → v1.0.0)
├── CONTRIBUTING.md # Conventional Commits + guia de contribuição
├── CODE_OF_CONDUCT.md # Contributor Covenant 2.1
├── SECURITY.md # Política de segurança
└── LICENSE # MIT
java -version # JDK 17 ou superior
mvn -v # Maven 3.9+git clone https://github.com/ESousa97/ExercisesOperators.git
cd ExercisesOperators
mvn clean compileSistema interativo completo (menus):
mvn -q exec:java -Dexec.mainClass="exercises.SistemaExerciciosCompleto"Via JAR:
mvn clean package
java -jar target/exercises-operators-1.0.0.jarExercício individual (standalone):
mvn -q exec:java -Dexec.mainClass="exercises.MediaNota"
mvn -q exec:java -Dexec.mainClass="exercises.AnaliseNumero"
mvn -q exec:java -Dexec.mainClass="exercises.ConversorTemperatura"# Compilar
mvn clean compile
# Executar testes unitários
mvn test
# Build completo + testes + cobertura
mvn verify
# Verificar estilo de código
mvn checkstyle:check
# Análise estática de bugs
mvn spotbugs:check
# Gerar JAR executável
mvn clean package
# Relatório de cobertura: target/site/jacoco/index.htmlmvn test
# Com cobertura
mvn verify
# Relatório: target/site/jacoco/index.html16 testes em ExercisesTest.java usando captura de I/O:
- Método
captureOutput(Runnable)— RedirecionaSystem.outparaByteArrayOutputStreampara validar saída de exercícios sem input - Método
captureOutputWithInput(String, Runnable)— RedirecionaSystem.outeSystem.inpara validar exercícios interativos (AnaliseNumero, ComparacaoSimples, MediaAluno)
Cobertura dos 13 exercícios standalone:
| Exercício | Testes | Validações |
|---|---|---|
| MediaNota | 1 | Cálculo de média (9.1) |
| CastingDasVariaveis | 1 | Resultado do casting (8) |
| Concatenacao | 1 | Presença de 'a' e "concatenação" |
| ConversorDolarReal | 1 | Presença de USD e R$ |
| ConversorTemperatura | 1 | Presença de °C e °F |
| Multiplicacao | 1 | Presença de R$ |
| OperadoresDeIncremento | 1 | Pré e pós-incremento |
| OperadoresLogicos | 1 | Resultados true/false |
| OperadoresPrimitivos | 1 | Tipos boolean, int, double |
| Porcentagem | 1 | Desconto e R$ |
| AnaliseNumero | 2 | Par/ímpar, múltiplos, comparação com 100 |
| ComparacaoSimples | 2 | Números iguais e diferentes |
| MediaAluno | 3 | Aprovado (≥7), reprovado (<5), recuperação (5-7) |
- CI — GitHub Actions com 4 jobs paralelos:
- Build & Test — Matrix JDK 17 + 21,
mvn verify, upload de relatório JaCoCo como artifact (7 dias) - Checkstyle — Google Java Style adaptado com 30+ regras (nomenclatura, imports, whitespace, blocks, coding, design, Javadoc informacional)
- SpotBugs — Análise estática de bugs em bytecode
- Spellcheck — CSpell com dicionário pt-BR + en + termos customizados do projeto
- Build & Test — Matrix JDK 17 + 21,
- CodeQL — Análise de segurança em push, PR e schedule semanal (segunda 08:00 UTC)
- Dependabot — Atualizações semanais de Maven e GitHub Actions (segunda 09:00 BRT, labels por tipo)
- Governança — Issue templates (Bug Report, Feature Request), PR template com checklist de 7 items, CONTRIBUTING.md com Conventional Commits, CODE_OF_CONDUCT.md, SECURITY.md
- Zero dependências de runtime — Apenas JDK padrão; JUnit 5, Checkstyle, SpotBugs e JaCoCo são exclusivamente de build/test
Qual a diferença entre o sistema interativo e os exercícios standalone?
O SistemaExerciciosCompleto é o entry point do JAR e contém toda a lógica dos menus hierárquicos com versões enriquecidas dos exercícios (loops de repetição, análises extras, formatação avançada). Os 13 arquivos individuais são versões simplificadas com main() próprio, ideais para estudo isolado de um conceito específico sem navegar pelos menus.
Como os testes funcionam se os exercícios usam System.in e System.out?
ExercisesTest redireciona System.out para ByteArrayOutputStream e System.in para ByteArrayInputStream antes de executar cada exercício. Após a execução, a saída capturada é validada com assertTrue(output.contains(...)). O System.out e System.in originais são restaurados no bloco finally.
Por que Checkstyle + SpotBugs + CodeQL?
Cada ferramenta cobre uma dimensão diferente: Checkstyle verifica estilo e convenções (nomenclatura, formatação, imports), SpotBugs detecta bugs potenciais no bytecode (null dereference, resource leaks), e CodeQL analisa vulnerabilidades de segurança. Para um projeto educacional, essa combinação serve como referência de boas práticas.
Posso usar JDK 21 ou superior?
Sim. O pom.xml define source/target como 17 (mínimo para switch expressions), mas a CI testa em JDK 17 e 21. Qualquer JDK ≥17 é compatível.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
MIT License - você pode usar, copiar, modificar e distribuir este código.
José Enoque Costa de Sousa
