Skip to content

Amanda-ribeiiro/Orange-Tech-BackEnd

Repository files navigation

👩🏻‍🎓 Certificado de conclusão

O que falta para você se tornar um desenvolvedor Java e começar 2023 com uma formação completa? Inscreva-se já no Orange Tech+ Back-End e tenha mais de 80 horas para transformar sua carreira e conquistar as melhores vagas do mercado tech em 2023! Tenha acesso a módulos sobre a linguagem Java que vão desde o básico e introdução ao ambiente até códigos mais avançados e frameworks mais usados.

Módulos sobre a linguagem Java que vão desde o básico e introdução ao ambiente até códigos mais avançados e frameworks mais usados.

Módulos

  1. Prepare-se para a Jornada
  2. Princípios de Desenvolvimento de Software
  3. Conhecendo a Linguagem Java
  4. Dominando Algoritmos básicos
  5. Programação Orientada a Objetos com Java
  6. Ganhando Produtividade com Spring Framework
  7. Dominando Algoritmos Intermediários com Desafios de Código Java
  8. Fortalecendo sua Carreira Profissional

1- Prepare-se para a Jornada (Onboarding)

Convite para "O Minha Carreira Tech - Orange Tech + | BackEnd

Temas sobre empregaribilidade e um painel que será abordado sobre como se destacar mais no mercado de tecnologia e como é o dia a dia de um profissional dentro do Banco Inter 20/03/2023.

Introdução ao Desenvolvimento Moderno de Software

3- Conhencendo a Linguagem de Programação Java

Professor: Gleyson Sampaio

Introdução e Objetivos

Conhecer a estrutura, a história de criação e evolução da linguagem Java, além de suas plataformas, instalação e utilização de IDEs para desenvolvimento. Java Fundamentos:

O que é Java

Linguagem Java é composta por um conjunto bem definido de funcionalidades (features). POO - Programação Orientada a Objetos:
  1. Classe e Objeto
  2. Encapsulamento
  3. Abstração
  4. Herança
  5. Polimorfismo

Plataforma independente, robusta, JVM (Java Virtual Machine)

Java e sua história

A empresa Sun Microsystems financiou uma pesquisa com condinome Green em 1991 que resultado no desenvolvimento baseada em C e C++ que seu criador James Gosling, chamou de Oak (carvalho) em homenagem a uma árvore que crescia na janela do seu escritório. Porém o nome Oak já ixistia e o nome Java foi de uma cafeteria. Com a explosão da World Wide Web em 1993 a Sun potencializou Java para criar páginas da Web.

📝 QUIZ - Introdução à Plataforma Java

1-Como é chamado o conceito de execuções paralelas em uma aplicação?

R: Multi-threading

2-Qual foi o fato que contribuiu para que a linguagem se tornasse tão popular?

R: A Linguagem se popularizou pelo termo "White Once, Run Anywhere", que enaltece a interoperabilidade da plataforma java.

3-Qual dos itens citados NÃO faz parte do conjunto de funcionalidades (features) da linguagem Java?

R: Sem tipagem, ou seja, fracamente tipada.

4-Hoje sabemos que a linguagem Java é mantida pela empresa Oracle Inc, mas antes, que empresa tinha os direitos desta tecnologia?

R: Sun Microsystems

5-A linguagem Java é baseada sobre quais linguagens de programação?

R: C e C++

6-Como é denominado o código originado da compilação de programas Java?

R: Bytecode

7-Qual dos itens citados NÃO faz parte dos 4 pilares da orientação a Objetos?

R: Sobrecarga

8-Para executar uma aplicação desenvolvida em Java, convertendo os bytecodes em código de máquina, é necessário ter disponível em nosso sistema operacional o recurso denominado de?

R: JVM, através e uma JDK ou JRE

9-Antes da linguagem receber o nome de Java, qual foi o primeiro nome escolhido pelo time de desenvolvimento?

R: Oak

10-Como se chama o desenvolvedor que liderou o projeto para criação da linguagem Java?

R: James Gosling

Certificado

Introdução a IDEs

IDE(Integrated Development Environment), capaz de prover vários mecanismo que dispõe de recursos que auxiliam muito no nosso desenvolvimento. Ex: - Aceleração de nossa escrita com *Auto-Complete* ou *IntelliSense*; - Formatação de palavras e blocos de códigos; - Análise de erro de sintaxe; - Compilação de programa; - Depuração (acompanhamento) de execução do programa.

Cada IDE dispõe de recursos comuns ou plugins espec[ificos para te auxiliar na agilidade de desenvolvimento. Dentre elas temos o *Visual Sudio Code, NetBeans, Eclipse, Intellij*.

- Eclipse: mais utilizada no ambiente corporativo com interface bem interativa. - NetBeans: Utilizada mais em ambiente acadêmico e com versão de menu e assistentes em português.

- IntelliJ: Oferece muito recursos de inteligência para agilidade de nosso desenvolvimento com sugestões de ações bem assertivas.

- VS Code: Hoje muito utilizada para desenvolvedores que já atuam com NodeJs ou plataformas de front-end.

📝QUIZ - Java - Plataformas e Escolha sua IDE

1- Qual dos itens citados NÃO é considerada uma IDE para desenvolver aplicações na linguagem Java? R: PyCharm

2- Qual a extensão de um arquivo que contém o código fonte da linguagem Java?

R: .java

3- Considerando os inúmeros recursos de uma IDE, qual do itens citados não é aplicado como uma funcionalidade do ambiente de desenvolvimento ?

R: Integração contínua

4- Qual plataforma contém recursos para desenvolvimento com recursos como páginas Web?

R: Java EE

5- Qual ferramenta tem o papel de converter o bytecode em um algoritmo que é interpretado pelo sistema operacional?

R: JVM

6- Após a compilação do código fonte na linguagem, qual a extensão do conteúdo gerado?

R: .class

7- Sabemos que uma das plataformas da linguagem Java contém uma biblioteca de componentes visuais, selecione esta plataforma.

R: Java SE1

8- Quais são os componentes de instalação da plataforma Java?

R: JDK/JRE

9- A linguagem Java conta com 4 plataformas de desenvolvimento, qual das alternativas NÃO faz parte?

R: Java IO

10- Você disponibilizou uma aplicação compilada para seus clientes, qual componente será necessário estar instalado na máquina do seu cliente?

R: JRE

Certificado

Introdução

Regras essenciais para a construção de códigos com base na linguagem Java.

Anatomia das Classes

A escrita de códigos de um programa é feito através da composição de palavras pré-definidas pela linguagem com as expressões que utilizam para determinar o nome do nossos arquivos, classes, atributos e métodos. É muito comum mesclarmos expressões no idioma amaericano com o nosso vocabulário. Nome de classe, métodos.

Padrão de nomenclatura Quando se trata de escrever códigos na linguagem Java, é recomendado seguir algmas convenções de escrita. Esses padrões estão expressos nos itens abaixo:

  • Arquivo Java: Todo arquivo .java deve começar com a Letra MAIÚSCULA. Se a palavra for comporta, a segunda palavra deve também ser maiúscula, exemplo: Calculadora.java CalculadoraCientifica.java

  • Nome da classe no arquivo: A classe deve possuir o mesmo nome do arquivo.java, exemplo:

1// arquivo CalculadoraCientifica.java

public class CalculadoraCientifica {

}
- void: executa mais não retorna nada.
  • Nome de variável: toda variável deve ser escrita com letra minúscula, porém se a palavra for comporta, a primeira letra da segunda palavra deverá ser MAIÚSCULA, exemplo: ano e anoFabricacao. O nome dessa prática para nomear variáveis dessa forma se chama "camelCase"

  • ve conter apenas letras, _ (underline), $ ou os números de 0 a 9.

  • ve obrigatoriamente se iniciar por uma letra(preferencialmente), - ou $, jamais com número

  • Deve iniciar com uma letra minúscula

  • Não pode conter espaçoes

  • Não podemos usar palavras reservadas da linguagem

  • o nome deve ser único dentro de um escopo

Declarando variáveis e métodos: • Declarar uma variável em Java segue sempre a seguinte estrutura: Tipo NomeBemDefinido = Atribuição (opcional em alguns casos)

Declarando métodos em Java segue uma estrutura bem simples: (todos os metodos na linguagem Java costuma a ser no infinitvo). Cada parâmentro é separado por vírgula. TipoRetorno NomeObjetoNoInfinito Parametro (s)

Identação: é um termo utilizado para escrever o código do programa de forma hierárquica, facilitando assim visualização e o entendimento do programa. Organizando arquivos: packge + nomeDaPastaEmQueOArquivoEsta

Java Beans: uma das maiores dificuldades na programação é escrever algoritmos legíveis a níveis que sejam compreendidos por todo seu time ou por você mesmo no futuro. Para isso a linguagem Java sugere, através de convenções, formas de escrita universal para nossas classes, atributos, métodos e pacotes.

• Uma variável deve ser clara, sem abreviações ou definição sem sentido;

• uma variáel é sempre no singular, exceto quando se referir a um array ou coleção;

• Defina um idioma único para suas variáveis. Se você for declarar variáveis em inglês, defina todas em inglês.

Tipos e variáveis

🗂️📑Ebook

Na linguagem Java existem algumas palavras reservadas para a representação dos tipos de dados básicos que precisam ser manipulados para a construção de programas. Esses tipos de dados são conhecidos como tipos primitivos (Primitive Types).

Primitive Types:
• int (ex: *in* cep = 21070333; // se comecar com zer, talvez tenha que ser de outro tipo)byte (ex: *byte* idade = 45; )
• shot (ex: *shot* ano = 2023; )
• long (ex: *long* cpf = 4563285788400L; // precisa ser encerrado com um "L" para representar que o numero não è inteiro è do tipo longo. Se comecar com zer, talvez tenha que ser de outro tipo).float (ex: *float* pi = 3.14F; tem que ter "f")
• double (ex: *double* salario = 1275.33; )
• boolean
• char 

Esses tipos não são considerados objetos, e portanto representam valores brutos. Eles são armazenados diretamente na pilha de memória. (Memory stack).

imag e

Variável x Constantes:

  • variável é uma área de memória associado a um nome que pode armazenar valores de um determinado tipo. Um tipo de dado define um conjunto de valores e um conjunto de operações. Java é uma linguagem com rigidez de tipos, diferente do JavaScript onde declarar o tipo de variável não é obrigatorio.
  • Já as constantes são valores armazenados em memória que não podem ser modificados depois de declarados. Em java, esses valores são representados pela reservada final, seguida do tipo. Por convenção constantes são sempre escritas em CAIXA ALTA.

Operadores

São símbolos especiais que tem significado próprio para a linguagem e estão associados a determinadas operações.
  • Atribuição representando pelo símbolo de = , atribuir um valor a uma determinada variável.

  • Aritméticos é utilizado para realizar operações matemáticas entre valores númericos, podendo se tornar ou não uma expressao mais complexa.

  • Unário são aplicados juntamento com um outro operador aritmético e eles realizam alguns trabalhos básicos como incrementar. decrementar, inverter valores númericos e booleanos.

(+)  Operador unário de valor positivo: número são positivos sem esse operador explicitamente;
(-)  Operador unário de valor negativo: nega um número ou expressão aritmética;
(++) Operador unário de incrementar de valor: incrementa o valor em 1 unidade;
(!)  Operador unário lógico de negação: nega o valor de uma expressão booleana;
(%) resto da divisáo;
 
número ++; é a mesma coisa que número = número +1;
  • Ternário é uma forma resumida para definir uma condição e escolher por um dentre dois valores. Você deve pensar numa condição ternária como se fosse uma condição IF norma, porém, de uma forma em que toda a sua estrutura estará escrita numa única linha. O operador ternário é representado pelo símbolo ?: utilizados na seguinte estrutura de sintaxe:
<Expressão Condicional> ? <caso condição seja tru> : <caso condição seja false>
  • Relacionais avaliam a relação entre duas variáveis ou expressões. NEste caso, mais precisamente, definem se o operando à esquerda é igual, diferente, menor, menor ou igual, maior ou maior ou igual da direita, retornando um valor booleano como resultado.
== quando desejamos verificar se uma variável é IGUAL A outra.
!= quando desejamos verificar se uma variável é DIFERENTE da outra.
> quando quando desejamos verificar se uma variável MAIOR QUE a outra.
>= quando desejamos verificar se uma variável é MAIOR OU IGUAL a outra.
< quando desejamos verificar se uma variável é MENOR QUE outra.
<= quando desejamos verificar se uma variável é MENOR OU IGUAL a outra.

método equals compara conteúdo

• Lógicos representam o recurso que nos permite criar expressões lógicas maiores a partir da junção de duas ou mais expressões

&& operador lógico "E"
( || )operador lógico "OU"

Métodos

Ponto de reflexão 1-Qual a proposta principal do método? Você deve se perguntar constantemente até compreender a real finalidade do mesmo.

2-Qual o tipo de retorno esperado após executar o método ? Você deve analisar se o método será responsável por retornar algum valor ou não.

3-Quais os parâmetro serão necessários para execução do método ? Os métodos as vezes

4-O método possui o risco de apresetar alguma exceção ? Exceções são comuns na execução de métodos, as vezes é necessário prever e tratar a possível existência de uma exceção.

5-Qual a visibilidado do método ? Será necessário que o método seja visível a toda aplicação, somente em mesmo pacotes, através de herança ou somente a nível a própria classe.

Todos o métodos são disposto por uma classe mais isso não quer dizer que todos os métodos precisa estar visivel em todo o programa.

Uma classe é definida por atributos e métodos. Atributos são, em sua grande maioria, variáveis de diferentes tipos e valores. Os métodos, por sua vez, correspondem a funções ou sub-rotinas disponíveis dentro de nossas classes.

Critério de nomeação de métodos: não são obrigatórios, mas é recomendável que sejam seguidos, pois essas convenções facilitam a vida dos programadores ao trabalharem em códigos de forma colaborativa.

  • deve ser nomeado como verbo (exemplo: acelerar, freiar, processar, concluir ...)
  • seguir o padrão camelCase (todas as letras minúsculas com a exceção da primeira letra da segunda palavra).

Não existe em Java o conceito de métodos globais. Todos os métodos devem SEMPRE ser definidos dentro de uma classe.

Escopo

O escopo pode ser entendido como o ambiente onde uma variável pode ser acessada. Em java, o escopo de variáveis vai de acordo com o bloco onde ela foi declarada.

A variável é criada no primeiro acesso à ela, se tornando inacessível após o interpretador sair do bloco de excecução ao qual ela pertence. Portando, esta variável não pode ser lida ou manipulada por rotinas e códigos que estão fora do seu bloco de declaraçã, ou seja, foa do escopo da variável.

Em uma Classe, podemos visualizar a diferença de escopos. Os atributos (variáveis) são declarados no corpo principal da Classe, sendo portando acessíveis por todos os métodos.

Palavras reservadas em Java

Palavras reservadas, são identidicadores de uma linguaem que já possuem uma finalidade específica, portanto, não podem ser utilizados para nomear variáveis, classes, métodos ou atributos.

A linguagem Java possui 52 palavaras reservadas. Todas essas palavras são classificadas com uma cor especial pela maioria das IDE's. Abaixo temos a lista de palavras agrupadas por suas finalidades.

_Palavra reservada em Java


abstract continue goto package synchronized assert default if private
this boolean do implements protected throw break double import
public throws byte else instanceof return transient case extends
int short try catch final interface static void char
finally long strictfp volatile class float native super while
const for new switch

Controle de pacotes:

  • import: importa pacotes ou classes para dentro do código;
  • package: especifica a que pacote, todas as classes de um arquivo pertencem.

Modificadores de acesso:

  • public: acesso de qualquer classe;
  • private: acesso apenas dentro da classe;
  • protected: acesso por classes no mesmo pacote e subclasses.

Primitivos:

  • boolean: um valor indicando verdadeiro ou falso;
  • byte: um inteiro de 8 bits (signed);
  • cha: um character unicode (16-bit unsigned);
  • double: um número de ponto flutuando de 64 bits (signed);
  • float: um número de ponto flutuante de 32 bits (signed);
  • int: um inteiro de 32 bits (signed);
  • long: um inteiro de 64 bits (signed);
  • short: um inteiro de 32 bits (signed);
  • void: indica que o método não tem retorno de valor.

Java DOC

Tipos de comentários: ```java One Line: Inserir uma única linha nesse comentário. Informação não é copilada na linguagem ela é nível de usuário // exemplo de comentário one line ``` ```java Mult Line: comentário mais detalhado quando necessário /* * * * */ ```
Docymentation: Menciona aspecto de documentação 
/ **
* Está duas estrelinhas acima
* é pra identificar que você 
* pretende elaborar um comentário
* a nível de documentação
*/

Terminal e Argumento

Com o JVM devidamente configurada, nós podemos criar um executável do nosso programa e disponilizar o instalador para qualquer sistema operacional.

Observe que nosso projeto Java criado por um IDE, ele terá uma pastada chama bin. É nesta pasa que ficarão os arquivos .class, o nosso bytecode. No terminal quando for executar colocar apenas "MinhaClasse" sem o ".class".

Quando executamos uma classe que contenha o método main, o mesmo permie que passemos um array [] de argumentos do tipo String. Logo podemos após a definição da classe a ser execuada informar estes parâmetros, exemplo:

java MinhaClasse argumentoUm argumentoDois

Os parâmentros pode ser adicionados manualmente nos arquivos .json assim não temos que ficar passar passando toda outra no terminal.

Classe Scanner proposta de ter melhor interação no que se refere aos inputs a entrada de dados que os nossos usuários vão querer realizar em nosso programa. Ex:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

System.out.println("Digite sua idade");

int idade = scanner.nexIt();

📝 QUIZ - Aprendendo a Sintaxe Java

1- Qual o tipo de dados seria mais recomendado para representar um CPF? R: long

2- Encontre o erro no código abaixo:

public class Tv {
    int canal = 1;
    void mudarCanal(){
        canal = novoCanal;
    }
}

R: o método mudarCanal deveria ter o parâmetro int novoCanal

3- Considerando que você precisa criar um arquivo Java para representar um Ponto Eletrônico, qual seria a forma mais recomendada para conteúdo inicial do arquivo?

R: public class PontoEletronico {}

4- Qual a melhor definição do método abaixo:

public String formatarCep(long cep){}

R: Este método tem por finalidade formatar um número de cep para texto que represente um código postal legível.

5- Qual é o valor impresso na execução do código abaixo ?

public static void main(String[] args) throws Exception {
      int numero1 = 1;
      String numero2 = "2";
      System.out.println(numero1+numero2); 
    }

R: 12

3.4 Lógica Condicional e Controle de Fluxos em Java

Operadores Relacionais

São símbolos especiais quais são capazes de realizar comparações entre determinados operandos e, em seguida, retornar um resultado. Tipos:
Similaridade: (==) igualdade, (!=) diferente
Tamanho: (>)maior, (>=) maior igual, (<) menor, (<=) menor igual 

Operadores Lógicos

São símbolos especiais quais são capazes de realizar comparações lógicas entre operandos lógico ou expressões e, em seguida, retornar um resultado.

Tipos: Conjunção, Disjunção, Disjunção exclusiva e Negação.

Conjunção: operação lógica que só é verdadeira quando ambos os operando ou expressões envilvidas são verdadeiras.

Simbologia: 
* &&
Terminologia:
* and(e)

image

O - Operando E - Expressão R- Resultado

Disjunção: operação que só é falsa quando ambos os operando ou expressões envolvidas sçao falsos.

Simbologia: 
* ||
Terminologia:
* or(ou)

image

O - Operando E - Expressão R- Resultado

Disjunção exclusiva: operação que só é verdade quando ambos os operando ou expressões são opostos.

Simbologia: 
* ^
Terminologia:
* xor

image

O - Operando E - Expressão R- Resultado

Negação: operação inverte o valor lógico de um operando ou expressão.

Simbologia: 
* !
Terminologia:
* inversão

image

O - Operando E - Expressão R- Resultado
operador bitwise: & e |
operador: shift: ~, >>, >>>, << (~ = vai inverter o bitwise,  >>, >>>, << =vai mexer com os zeros)

Controle de Fluxo

São estruturas que tem a capacidade de direcionar o fluxo de execução do código

Tipos:

  • Decisão: if, if-else, if-else-if, switch e operador ternário
  • Repetição: for, while, do while
  • Interrupção: break, continue e return

Decisão: estrutura que avalia uma condição booleana ou variável para direcionar o fluxo de execução. Opções: if(se), switch(escolha), e operador ternário

Decisão: if, if-else, if-else-f

if (condição) {
}

if (condição) {
} else {
}

if (condição) {
} else if (condição){
} else {
} 

Decisão: Operador Ternário

condição ? true: false;

ligado ? desligar: ligar;

condição  ? true : null;

emMovimento ? freia: null;

Decisão: switch

variável: byte, short, char, int, enum, string

switch (variável) {
case 1:
break;
case ...:
break;
default: 
break;
}
  • Switch é para valores exatos e if para expressções booleanas;
  • Evitar usar o default do awitch para "cases genéricos"
  • Evitar o efeito "flecha" dos if's
  • Evitar muitos if's aninhados
  • Blocos É um grupo de 0 ou mais códigos quais trabalham em conjunto para executar uma operação. Tipos: locais dentro de métodos, estátivos dentro de classes, instância dentro de classes.

📝 QUIZ - Blocos

1- Sobre controle de fluxo, é incorreto afirmar:

R: switch avalia expressões booleanas.

2- Dado o seguinte código é correto afirmar:

if (!b2)
              System.out.println("Verdade");
else {
           System.out.println("Mentira");
           System.out.println("Mentira");
}

R: como o "if" tem só uma linha, as "{" e "}" são opcionais.

3- Avalie o código a seguir e marque a opção correta:

if ((10 + 15) < 20)
    System.out.println("Verdade");
else
    System.out.println("Mentira");

R: O texto "Mentira" deve ser exibido.

4- Sobre operadores relacionais, qual das alternativas a seguir é a INCORRETA?

R: "=" é o operador de igualdade.

5-Sobre controle de fluxo, é correto afirmar:

R: if não suporta expressões aritméticas.

6- Dadas as variáveis:

int i1 = 10; float f1 = 4.5f; char c1 = "x";
boolean b1 = true;
Qual operação é válida?

R:

 c1>i1<    

7- Qual das expressões lógicas a seguir é válida?

R:

(10 > 15) && true

8- São tipos de operadores relacionais:

R: Igualdade e menor

9- Avalie as expressões e marque a verdadeira.

R: true || false é true

10- Sobre operadores lógicos, é correto afirmar que:

R: "!" corresponde a operação lógica "inversão"

Certificado

3.5 Estruturas de Repetição e Arrays em Java

  • Apresentação e Visão Geral
  • Professora: Camila Cavalcante

    🔗 Repositório

    Objetivo do Curso

    • Conhecer as estruturas de repetição
    • Arrays na Linguagem Java
    • Estrutura for-each

    Percurso

    • Comandowhile
    • Comandodo-while
    • Comandofor
    • Controle de Repetição:breakecontinue

    Visão Gera

    O real poder dos computadores está na sua habilidade para repetir uma operação ou uma série de operações várias vezes. Cada repetição é chamada laço loop é um dos conceitos básicos da programação estruturada.

    Uma estrutura de repetição permite que uma sequência de comandos seja executada repetidamente, caso determinadas condições sejam satisfeitas.

    As Estruturas de repetição podem ser classificadas em:

    • repetição com teste no iníciowhile
    • repetição com teste no finalwhile
    • repetição contadafor
    • O Comandobreak é utilizado para terminar de forma abrupta uma repetição.
    • Quando o comandocontinue é executado, os comandos restantes da repetição são ignorados e programa volta a testar novamente a condição.

    Fluxogramas Screenshot-from-2021-08-25-09-44-42

    OPERADORES DE INCREMENTO E DECREMENTO

    Screenshot-from-2021-08-23-10-56-10

    Operações Aritméticas Screenshot-from-2021-08-23-10-56-24

    Arrays

    Array é um objeto utilizado para armazenar sequencialmente dados do mesmo tipo. Permanecem com o mesmo tamanho depois de criados.

    Screenshot-from-2021-08-25-09-11-48

    Array Unidimensional

    Nome do array (c) {(c) é o nome do meu<code>array</code> nesse exemplo.}
    
    Indíce (ou subscrito) {c[0] = o 0 seria a posição em que o<code>array</code> está. Lembrando que as posições sempre começa do "0".}
    

    Array Multidimensional

    Primeiro conchete guarda a posição da linha e o segundo da coluna:


    Coluna 0 coluna 1 coluna 2
    a [0] [0] a [0] [1] a [0] [2]
    a [1] [0] a [1] [1] a [1] [2]

    Conhecendo o repositório

    Pré-requistos
    • Java JDK 11
    • IDE para desenvolvimento Java
    • Conhecer a sintaxe Java

    🔗 Visão geral: Estruturas de Repetição e Arrays

    🔗 Exercícios Loops

    🔗 Exercícios Arrays

    🔗 Lista de Exercícios Arrays Unidimensionais - Possíveis soluções

    🔗 Lista de Exercícios Arrays Multidimensionais

    Exercício Resolvido: Estrutura de Repetição

    Nome e Idade

    package exercicios.loops;
    import java.util.Scanner;
    /*
    Faça um programa que leia conjuntos de dois valores,
    o primeiro representando o nome do aluno e o segundo representando a sua idade.
    (Pare inserindo o valor 0 no campo nome)
    */
    
    public class NomeEIdade {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
    
            //variáveis
            String nome; //armazena o nome
            int idade; //armazena a idade
    
            while(true) { //Enquando o loop for verdadeiro
                System.out.println("Nome: "); //Peça o nome
                nome = scan.next(); //armazene esse nome na variável
    
                if (nome.equals("0")) { //caso o nome igual a "0"
                    break; //interrompa o programa
                }
    
                System.out.println("Idade: "); //Peça a idade
                idade = scan.nextInt(); //armazene a idade na variável
    
                //imprima o nome e a idade
                System.out.println("Nome: " + nome + " - idade: " + idade);
            }
        }
    }

    Nota

    package exercicios.loops;
    /*
    Faça um programa que peça uma nota, entre zero e dez.
    Mostre uma mensagem caso o valor seja inválido
    e continue pedindo
    até que o usuário informe um valor válido.
    */
    import java.util.Scanner;
    
    public class Nota {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
    
            System.out.println("Nota de 0 a 10: "); //Peça uma nota de 0 a 10
            int nota = scan.nextInt(); //Entrada de dados, neste caso de um int
    
            while(nota < 0 | nota > 10) { //Enquanto o valor da nota for menor que 0 ou maior que 10.
                System.out.println("Nota Inválida!"); //Mensagem que o valor é inválido
                System.out.println("Tente novamente. Nota: "); //Peça novamente a nota
                nota = scan.nextInt(); //Entrada de dados, neste caso de um int
            }
    
            System.out.println("Nota: " + nota); //imprimindo a nota válida
        }
    
    }

    Maior e Média

    package exercicios.loops;
    /*
    Faça um programa que leia 5 números
    e informe o maior número
    e a média desses números.
    */
    import java.util.Scanner;
    public class MaiorEMedia {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
    
            //variáveis
            double maior = 0; //guarda o maior número
            double soma = 0; //guarda a soma
            double media; //guarda a média
    
            int count = 0; //controla o loop
            //loop
            do {
                System.out.println("Número: "); //Peça um número
                double numero = scan.nextDouble(); //Entrada de dados, neste caso de um Double.
    
                if (numero > maior) { //Caso o valor que o usuário digitou seja maior que o valor armazanado na variável maior.
                    maior = numero; //atribua o valor deste número a variável maior.
                }
    
                soma = soma + numero; //some o número informado pelo usuário com variável soma (independente do valor)
    
                count = count + 1; //some o valor 1 ao contador, até que invalide a condição do loop. (count < 5)
            } while (count < 5); //enquanto o contador tiver o valor menor que 5
    
            media = soma / 5; //faça o cálculo da média. (soma/quantidade)
    
            //imprimindo o maior número digtados e a média dos mesmos
            System.out.println("Maior: " + maior + " - Média: " + media);
        }
    
    }

    Par e Ímpar

    package exercicios.loops;
    /*
    Faça um programa que peça N números inteiros,
    calcule e mostre a quantidade de números pares
    e a quantidade de números impares.
    */
    import java.util.Scanner;
    import java.util.Scanner;
    
    public class ParEImpar {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
    
            System.out.println("Quantidade de números: "); //Peça um número
            int quantidadeDeNumeros = scan.nextInt(); //Entrada de dados, neste caso de um int.
    
            //variáveis para guardar a quantidade dos números pares e ímpares
            int quantPar = 0, quantImpar = 0;
    
            int count = 0; //controla o loop
            //loop
            do { //primeiro, independente do que tem no while, faça:
                System.out.println("Número: "); //Peça um número
                int numero = scan.nextInt(); //Entrada de dados, neste caso de um int.
    
                //se o resto da divisão do número por 2 (numero/2) for 0,
                if (numero % 2 == 0) quantPar++; //acrescente o valor 1 a variável quantPar.
                    //caso contrário, o número digitado é ímpar
                else quantImpar++; //adicione o valor 1 a variável quantImpar.
    
                count++; //some o valor 1 ao contador até que invalide a condição do loop. (count < quantidadeDeNumeros)
            } while (count < quantidadeDeNumeros);
            // Faça o loop caso o valor do contador seja menor que a quantidade de números
    
            //imprimindo a quantidade de números pares digtados e números ímpares digitados
            System.out.println("Quantidade números pares: " + quantPar + " / Quantidade números ímpares: " + quantImpar);
        }
    }

    Tabuada

    package exercicios.loops;
    /*
    Desenvolva um gerador de tabuada,
    capaz de gerar a tabuada de qualquer número inteiro entre 1 a 10.
    O usuário deve informar de qual numero ele deseja ver a tabuada.
    A saída deve ser conforme o exemplo abaixo:
    Tabuada de 5:
    5 X 1 = 5
    5 X 2 = 10
    ...
    5 X 10 = 50
    */
    import java.util.Scanner;
    
    public class Tabuada {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
    
            System.out.println("Número: "); //Peça um número
            int numero = scan.nextInt(); //Entrada de dados, neste caso de um int.
    
            System.out.println("Tabuada de " + numero + ":");//frase ilustrativa para indicar a tabuada
    
            //para: variável i = 0, até i menor ou igual a 10, adicionando 1 ao valor de i a cada loop.
            for (int i = 0; i <= 10; i = i + 1) {
                //número escolhido pelo usuário "X" o valor de i "=" a multiplicação do número com o i.
                System.out.println(numero + " X " + i + " = " + (numero * i));
            }
        }
    }

    Fatorial

    package exercicios.loops;
    /*
    Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário.
    Ex.: 5!=5.4.3.2.1=120
    */
    import java.util.Scanner;
    
    public class Fatorial {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in); //Abertura da entrada de fluxo de dados através do teclado
    
            System.out.println("Número: "); //Peça um número
            int numero = scan.nextInt(); //Entrada de dados, neste caso de um int.
    
            int multiplicacao = 1; //variável para guardar o valor da multiplicação dos valores.
    
            System.out.print(numero + "!="); //frase ilustrativo para indicar o fatorial
    
            //para: variável i = numero, até i maior que 0, diminuimos 1 ao valor de i a cada loop.
            for(int i = numero; i > 0; i--) {
                multiplicacao *= i; //multiplicamos os valores de i e armazenamos na variável multiplicação
    
                //criamos esta estrutura condicional para imprimir o resultado conforme foi solicitado no exercício.
                if (i != 1) { //se o i tiver o valor diferente de 1
                    System.out.print(i + "."); //imprima o valor do i seguido de "."
                } else { //se não (se o i tiver o valor igual a 1)
                    //imprima o valor do i seguido do sinal "=" e o resultado da multiplicação
                    System.out.print(i + "=" + (multiplicacao));
                }
            }
        }
    }
    

    Exercício Resolvido: Arrays

    Ordem Inversa

    package exercicios.arrays;
    /*
    Crie um vetor de 6 números inteiros
    e mostre-os na ordem inversa.
    */
    
    import java.util.Scanner;
    
    public class OrdemInversa {
        public static void main(String[] args) {
    
            int[] vetor = {-5, -6, 15, 50, 8, 4};
    
            //System.out.println(vetor.length);
    
            System.out.print("Vetor: ");
            int count =0;
            while(count < (vetor.length)) {
                System.out.print(vetor[count] + " ");
                count++;
            }
    
            System.out.print("\nVetor: ");
            for(int i = (vetor.length - 1); i >= 0; i --) {
                System.out.print(vetor[i] + " ");
            }
    
        }
    }

    Consoantes

    package exercicios.arrays;
    /*
    Faça um Programa que leia um vetor de 6 caracteres,
    e diga quantas consoantes foram lidas.
    Imprima as consoantes.
    */
    
    import java.util.Scanner;
    
    public class Consoantes {
     public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
    
            String[] consoantes = new String[6];
            int quantidadeConsoantes = 0;
    
            int count = 0;
            do {
                System.out.println("Letra: ");
                String letra = scan.next();
    
                if ( !(letra.equalsIgnoreCase("a") |
                        letra.equalsIgnoreCase("e") |
                        letra.equalsIgnoreCase("i") |
                        letra.equalsIgnoreCase("o") |
                        letra.equalsIgnoreCase("u")) )  {
                    consoantes[count] = letra;
                    quantidadeConsoantes++;
                }
    
                count++;
    
            } while(count < consoantes.length);
    
            System.out.print("Consoantes: ");
            for ( String consoante  :  consoantes ) {
                if ( consoante != null)
                    System.out.print(consoante + " ");
            }
            System.out.println("Quantidade de consoantes: " + quantidadeConsoantes);
            System.out.println(consoantes.length);
    
        }
    
    }

    Números Aleatórios

    package exercicios.arrays;
    /*
    Faça um Programa que leia 20 números inteiros aleatórios (entre 0 e 100) armazene-os num vetor.
    Ao final mostre os números e seus sucessores.
    */
    
    import java.util.Scanner;
    
    public class NumerosAleatorios {
     public static void main(String[] args) {
            Random random = new Random();
    
            int[] numerosAleatorios = new int[20];
    
            for(int i = 0; i < numerosAleatorios.length; i++) {
                int numero = random.nextInt(100);
                numerosAleatorios[i] = numero;
            }
    
            System.out.print("Numeros Aleatorios: ");
            for (int numero : numerosAleatorios) {
                System.out.print(numero + " ");
            }
    
            System.out.print("\nAntecessor dos Numeros Aleatorios: ");
            for (int numero : numerosAleatorios) {
                System.out.print((numero-1) + " ");
            }
    
            System.out.print("\nSucessores dos Numeros Aleatorios: ");
            for (int numero : numerosAleatorios) {
                System.out.print((numero+1) + " ");
            }
    
    
    
    
        }
    
    }

    Array Multidimensional

    package exercicios.arrays;
    /*
    Gere e imprima uma matriz M 4x4 com valores aleatórios entre 0-9.
    */
    
    public class ArrayMultidimensional {
    public static void main(String[] args) {
            Random random = new Random();
    
            int[][] M = new int[4][4];
    
            for(int i = 0; i < M.length; i++) {
                for( int j = 0; j < M[i].length; j++) {
                    M[i][j] = random.nextInt(9);
                }
            }
    
            System.out.println("Matriz: ");
            for (int[] linha : M  ) {
                for (int coluna : linha ) {
                    System.out.print(coluna + " ");
                }
                System.out.println();
            }
    
        }
    
    
    }
    import java.util.Scanner;

    📝 QUIZ - Exercícios Resolvidos: Arrays

    1- As estruturas de repetição podem ser classificadas em:

    R: Repetição com teste de início while, repetição de teste no final do-while, repetição contada for

    2-

    int num = 5, count = 1;
            while(count <= 3) {
                ++count;
                num += count;
            }
            System.out.println(num);

    Dado o código acima, o que será impresso no console?

    R: 14

    3- Sobre arrays, marque a alternativa correta.

    R: Permanecem com o mesmo tamanho em que foram criados.

    4-

    int i, num = 5;
            for (i = 0; i < 3; i++) {
                num += i;
                System.out.print(i);
            }

    Dado o código acima, o que será impresso no console?

    R: 012

    5- “É um objeto utilizado para armazenar sequencialmente dados do mesmo tipo.” Acima definimos:

    R: array

    6- Sobre Estruturas de repetição, julgue a alternativa INCORRETA:

    R: As estruturas de repetição podem ser classificadas em: while, do-while, e array

    7- Como podemos definir “Estruturas de repetição”:

    R: Uma estrutura que permite a execução de uma sequência repetidamente, caso determinadas condições sejam satisfeitas.

    8-

    int num = 5, count = 1;
            do {
                num += count;
                System.out.println(num);
            } while (count <= 3);

    Dado o código acima, o que será impresso no console?

    R: lopping infinito

    9-

    int[][] numeros = {{4, 9, 8, 5}, {3, 0, 1, 5}, {1, 2, 7, 4}};
    System.out.print(numeros[2][2]);

    Dado o código acima, o que será impresso no console?

    R: 7

    10-

    String[] nomes = {"Camila", "Venilton", "Leonardo", "Renan", "Rafael"};
    System.out.print(nomes.length);

    Dado o código acima, o que será impresso no console?

    R: 5

    Repositorio GitHub

    3.5 Entendendo o Metodo Java

    Criação

    Conceituação

    É uma porção de códigos (sub-rotina) que é disponibilizada por uma classe. Este é executado quando é feita uma requisição a ele. São responsáveis por definir e realizar um determinado comportamento.

    Padrão de definição:

    <?visibilidade?><?tipo><?modificador?>retorno nome(<?parâmentros?>)<?exceções?>corpo
    

    Onde:

    __V:__ "public", "protected" ou "private"
    
    T: concreto ou abstrato
    
    M: "static" ou "final"
    
    __R:__ tipo de dado ou "void" // não retorna nada só
    
    __N:___ nome que é fornecido ao método // padrão
    
    __P:__ parâmetros que pode receber // se o método for usado de ficar dentro do parâmetro ou parâmetro vazio
    
    E: exceções que pode lançar 
    
    __C:__ código que possui ou vazio
    

    Exemplos

    public String getNome() {...} // retorna uma nome
    public double calcularTotalNota() {...}
    public int verificarDistancia(int cordenada1, int cordenada2) {....}
    public abstract void executar(); // corpo vazio do m[etodo
    public void alterarFabricante(Fabricante fabricante) {...}
    public Relatorio gerarDadosAnaliticos(Cliente cliente, List<Compra>compras){...} // como passar mais de um parâmentro.
    
    public static R N(P) {...}

    Utilização Passa-se uma mensagem através de uma classe ou objeto.

    nome_da_classe.nome_do_metodo(); ou nome_da_classe.nome_do_metodo(...);

    Math.random(); ou Math.sqrt(4); usuario.getEMail(); ou usuario.alterarEndereco(endereco);

    Particularidades

    Assinatua é a forma de identificar unicamente o método:

    Ass = nome + parâmetros
    

    Método:

    public double calcularTotalVenda (double precoItem1, double precoItem2, double precoItem3) {....}

    Assinatura:

    calcularTotalVenda(double precoItem1, double precoItem2, double precoItem3)

    Exercícios:

    • Tente ao máximo criar métodos que trabalhem sozinhos ou conjunto;
    • Pode chamar um método dentro de outro;
    • Pode passar como parâmetro, a chamada de um outro método.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Sobrecarga

    É a capacidade de definir método para diferentes contextos, mas preservando seu nome.

    Criação

    Alterar a assinatura do método:

    Ass = nome + parâmetros
    
    converterParaInteiro(float f);
    converterParaInteiro(double d);
    converterParaInteiro(String s);
    converterParaInteiro(float f, RoundType rd);
    converterParaInteiro(double d, RoundType rd);
    converterParaInteiro(String s, RoundType rd);
    
    converterParaInteiro(RoundType rd, String s);
    converterParaInteiro();

    Exemplo

    image

    Exemplo

    image

    Exercícios:

    Crie uma aplicação que calcula a área dos 3 quadriláteros notáveis: quadrado, retângulo e trapézio. (Obs: use sobrecarga.)

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Retornos

    É uma estrução de interrupção

    Simbologia: return

    Funcionamento

    O método executa seu retorno quando:

    - Completa todas suas instruções internas; - Chega a uma declaração explícita de retorno; - Lança uma exceção.

    Considerações

    • O tipo de retorno do método é definido na sua criação e pode ser um tipo primitivo ou objeto;
    • O tipo de dado do return deve ser compatível com o do método;
    • Se o método for sem retornovoid, pode ou náo ter um return para encerrar sua execução.

    Exemplos

    public String getMensagem(){
        return "Ola!";
    }
    public double getJuros() {
        return 2.36;
    }
    public int getParcelas(){
        return 1.36f;
    }
    public void setIdade(...){
        return 10;
    }
    public void executar() {
        ...
        return;
        ....
    }

    Exercícios:

    Recrie aplicação que calcula a área dos 3 quadriláteros notáveis. Agora faça os métodos retornarem valores.

    📝 QUIZ - Retornos

    1- Sobre métodos, marque o que for INCORRETO:

    R: Métodos só podem ser utilizados a partir de classes, de forma estática.

    2- Tendo o método a seguir, marque o que for INCORRETO:

    public double calcularTotalNota() {…}

    R: Ele pode retornar um valor do tipo texto.

    3- Sobre métodos, marque o que for VERDADE:

    R: Todo método deve ter um nome.

    4- A partir do método a seguir, marque a alternativa CORRETA:

    public int verifica(int i) {...}

    R:

    public int verifica(int i) {return 0;} // é uma implementação válida.

    5- Em relação a assinatura de um método, marque o CORRETO:

    R: É constituída do nome e lista de parâmetros do método.

    6- Tendo o método a seguir, qual não é uma sobrecarga válida?

    public int avaliar()

    R:

    public int avaliar(double i)

    7- Avalie o método a seguir e marque a alternativa INCORRETA:

    public String verifica(int idade) 
       if (idade > 18) {
         returnMaior de idade”;
       } else {
         returnMenor de idade”;   
       }

    R: O corpo do método está definido corretamente.

    8- Um método deve ser público, sem retorno, se chamar xpto, tem um int como parâmetro e ter corpo vazio. Baseado nessa especificação, qual é a definição correta?

    R:

    public void xpto(int i){}

    9- Avalie o método a seguir e marque a alternativa CORRETA:

    public void verifica(int i) {
       if (i > 1) {
         returnMaior”;
       } else {
         returnMenor”;   
       }
    }

    R: Ocorre um erro de compilação, pois métodos void não tem retorno.

    10- Sobre métodos, marque o que for INCORRETO:

    R: Os parênteses são opcionais na definição de métodos.

    4- Dominando algoritmos básicos com desafios de códigos em Java

    4.1 Desafio - Mesada do Sobrinho

    import java.util.Scanner;
    
    /*
     * Seu sobrinho começou a ganhar mesada dos pais. No auge dos seus 8 anos recebendo 50 reais por mês, ele quer saber quanto 
     * terá se juntar todo o dinheiro, sem gastar nada, durante alguns meses. E você, como um bom tio com habilidades de programação, 
     * vai criar um programa que com as entradas do seu sobrinho vai calcular automaticamente a quantidade de dinheiro que ele terá 
     * em X meses.
     * 
     * Entrada
     * A entrada será o número de meses que o sobrinho polpará o dinheiro.
     * 
     * Saída
     * A saída deve ser o valor que o sobrinho terá ao final dos meses. (sem as aspas)
     * 
     */
    
    public class MesadaSobrinho {
        public static void main(String[] args) {
    
            try (Scanner leitor = new Scanner(System.in)) {
                int entrada = leitor.nextInt();
                int mesada = 50;
    
    
                int total = mesada * entrada;
         
    
                System.out.println(total);
            }
        }
    }

    4.2 Desafio - Download de Pacotes

    import java.util.Scanner; 
    /*
     * Desafio
    Você foi contratado para criar um gerenciador de pacotes. Porém, o que restou para você fazer foi o contador de 
    porcentagem de download dos pacotes. Mas como o espaço para essa informação ficou pequeno, a empresa optou por fazer uma 
    escala de 10 – 1. Então a escala será 1 = 10%, 2 = 20%, 3 = 30% e etc.
    Para cada 10% de download, o programa deve printar, em sequência e sem espaços, uma barra “/”.
    
    Entrada
    A entrada será um número que representará a porcentagem
    
    Saída
    A saída serão as barras sem espaços entre elas.
     */
    
    
        
    public class DownloadPacotes {
        public static void main(String[] args) {
    
            try (Scanner leitor = new Scanner(System.in)) {
                int tamanho = leitor.nextInt();   
                
                for (int i = 1; i <= tamanho && i <= 10; i++) {
                    System.out.print("/");
                }
            }   
        }
    }

    4.3 Desafio - Leitura de Gertrudes

    import java.util.Scanner;
    
    /*
     * Desafio
    Sua tia Gertrudes é uma leitora assídua. E ela gostaria de ter um aplicativo que dissesse para ela, de acordo com o número 
    de páginas de um livro, quanto tempo ela levaria para ler lendo apenas 3 páginas por dia. Como você está aprendendo Java, 
    você se disponibilizou para ajudá-la com esse desenvolvimento.
    
    Entrada
    A entrada será o número de páginas de um determinado livro
    
    Saída
    A saída deverá ser quanto tempo ela vai levar para ler esse livro
    
    
     */
    public class Leitura {
        public static void main(String[] args) {
            try (Scanner leitor = new Scanner(System.in)) {
                int paginas = leitor.nextInt();
                int paginasLidas = paginas / 3;
    
    
    
                System.out.print(paginasLidas + " dias");
            }
        }
    }

    4.4 Desafio - Lojinha de doces

    import java.util.Scanner;
    
    /*
     * Desafio
    Uma lojinha de doces tem muitos clientes por ser ao lado de uma escola. Para aumentar as vendas o dono resolveu 
    colocar uma máquina onde os clientes, principalmente as crianças que estão muito acostumadas com a tecnologia, 
    poderiam colocar suas moedas e receber dois doces aleatórios. Cada 1 real irá render 2 doces aleatórios.
    
    Entrada
    A entrada será a quantidade de dinheiro que cada cliente, um por vez, possui.
    
    Saída
    A saída deverá ser a quantidade de doces que cada cliente conseguiu obter. (sem as aspas)
    */
    
    public class Lojinha {
        public static void main(String[] args) {
            try(Scanner leitor = new Scanner (System.in)) {
                int dinheiro = leitor.nextInt();
                int doces = dinheiro * 2;
    
                System.out.print("O cliente obteve " + doces + " doces");
            }
        }  
    }
    

    4.5 Desafio - Industria da multa

    import java.util.Scanner;
    
    /*Desafio
    A prefeitura de uma cidade A instalou uma câmera para verificar quem estava acima da velocidade permitida na rodovia 
    da entrada da cidade. Porém, ela é uma cidade extremamente movimentada e a prefeitura não deu conta de enviar as multas 
    necessárias para quem ultrapassasse a velocidade permitida de 60km/h. 
    O seu papel será o de criar um programa que verifique os dados recebidos da câmera e envie uma mensagem dizendo se o motorista 
    será multado ou não.
     * 
     * 
     * Entrada
    A entrada vai ser a velocidade do motorista.
     * 
     * 
     * Saída
    A saída será uma mensagem no console dizendo se o motorista foi multado ou não. (sem as aspas)
     */
    
    public class Multa{
        public static void main(String[] args) {
            try(Scanner leitor = new Scanner(System.in)) {
                int velocidadeAtual = leitor.nextInt();
    
               if(velocidadeAtual <= 60) {
                System.out.print("Nao foi multado");
               } else {
                System.out.print("Foi multado");
               }
            }
        }
    }

    5- Programação orientada a objetos com Java

    5.1 Programação Orientada a Objetos com Java

    5.2 Trabalhando com Collections Java

    5.3 Debugging Java

    5.4 Tratamento de Exceções em Java

    5.5 Abstraindo um Bootcamp Usando Orientação a Objetos em Java

    Apresentação e visão geral de POO - Programação Orientada a Objetos

    __POO__

    • Paradigma: Modelo, exemplo a ser seguido;
    • Programação: Desenvolvimento de uma aplicação;
    • Orientada: Aquilo que é regido segue uma orientação;
    • Objeto: Um molde que represena uma determinada classe.

    Paradigma de Programação Orientada a Objetos: É um modelo de desenvolvimento de aplicações, sendo este modelo construído acerca do conceito de objetos.

    Linguagem de programação: É uma linguagem formal que, através de uma série de instruções, permite que um programador escreva um conjunto de ordens, açoes consecutivas, dados de algoritmos para criar programas. Podem ser classificadas:

    • Níveis de abstração;
    • Paradigma de programação;
    • Arquitetura de aplicação;
    • Tipo de execução.

    Paradigma de Linguagem de Programação: É um conjunto de características que podem ser utilizado para categorizar determiado grupo de linguagens. Um paradigma pode oferecer técnins apropriadas para uma aplicação específica.

    Paradigmas Principais e seus Subparadigmas:

    Paradigma Imperativo:

    • Paradigma Estruturado
    • Paradigma Concorrente
    • Paradigma OO (Orientação à Objeto)

    Paradigma Declarativo:

    • Paradigma Funcional
    • Paradigma Lógico

    Cofiguração do Ambiente

    [site Git Ignore](https://www.toptal.com/developers/gitignore)

    image

    Atalho para gerar os métodos getters e setters no VSCode (Visual Studio Code):

    ctrl + .

    Outra forma seria clicar com o botão direito selecionar o Source Action... Generate Getters and Setters... e depois selecionar quais atributos precisa ser gerado.

    digitar sout e apertar enter para abrir System.out.println()

    6- Ganhando Produtividade com Spring Fremework

    6.1 Principais Protocolos de Comunicação da Internet

    6.2 Gerenciamento de Dependências e Buil em Java com Maven

    Professor: Willyan Guimarães Caetano

    Introdução, definição e instalação

    Apresentação Inicial do Curso
    - Criar um Projeto utilizando a ferramenta; - Entender os Principais conceitos por trás do Maven; - Gerenciar dependências do seu projeto; - Configurar plugins e projetos com necessidades específicas.
    O que é Apache Mave

    Ferramenta para gerenciar build e dependências de um projeto. Primeira versão foi em julho de 2004, mantido pela Apache Software Foundation.

    • Endereça como o Software foi constrído e suas dependências através do (POM) Project Object Model;
    • Facilitar a compreensão do desenvolvedor;
    • Fornecer informações de qualidade.

    Documentação Maven

    Instalação: Windows

    Site Maven para instalação

    image

    Download image

    Extrair image

    • Necessário ter a versão 11.0 do JDK

    Note Importante verificar no prompt de comando se o JDK está instalado javac -version

    Painel de controle > Sistema e Segurança > Sistema > Configuração avançada de Sistema > variáveis de ambiente > variável de sistema > Path > novo

    Iremos adicionar manualmente no Path utilitarios que o Windows enxerga em seu ambiente para execução o caminho da pasta "maven" que fizemos o download para assim ser possível em independente do caminho ao ser executado na linha de comando ser aberto.

    Verificar novamente no prompt de comando se o MVN foi instalado e está funcionando corretamente: mvn --version

    Instalação: Linux

    Site Maven para instalação

    image

    Download image

    Abra o terminal acesse a pasta de Download e descompacta o arquivo, comando tar xf nomeDaPasta.

    Note Importante verificar no prompt de comando se o JDK está instalado javac -version

    O arquivo bashrc é um script em shell que roda todas as vezes que abrimos o terminal.

    Para adicionar o caminho no Path do sistema:

    Abra um editor de texto de sua preferência e acesse o arquivo .bashrc e no final do arquivo coloque:

    Note O arquivo .bashrc é um arquivo oculto então para acessar aperte: ctrl+h

    export PATH=/localEmqueAPastaEsta:$PATH

    Verificar novamente no prompt de comando se o MVN foi instalado e está funcionando corretamente: mvn --version

    Primeiro Projeto e Conceitos

    Criando um projeto via linha de comando

    Criando o primeiro projeto pelo terminal prompt de comando:

    mvn archetype:generate -DgroupId=one.digitalinnovation -DartifactId=quick-start-maven -Darchetype=maven-archetype-quickstart -DinteractiveMode=false

    O comando "mvn archetype:generate -DgroupId=one.digitalinnovation -DartifactId=quick-start-maven -Darchetype=maven-archetype-quickstart -DinteractiveMode=false" é usado para gerar um novo projeto Maven usando o arquétipo Quickstart.

    Veja o que cada parâmetro significa:

    "mvn" é o comando para executar o Maven. "arquétipo:gerar" é o objetivo do Maven que gera um novo projeto a partir de um arquétipo. "-DgroupId=one.digitalinnovation" define o ID do Grupo para o novo projeto como "one.digitalinnovation". "-DartifactId=quick-start-maven" define a ID do Artefato para o novo projeto como "quick-start-maven". "-Darchetype=maven-archetype-quickstart" especifica que o arquétipo de início rápido deve ser usado para gerar o projeto. "-DinteractiveMode=false" especifica que o Maven não deve solicitar a entrada do usuário durante o processo de geração do projeto. Quando você executar esse comando, o Maven criará um novo diretório chamado "quick-start-maven" no diretório atual. Esse diretório conterá um projeto Maven esqueleto baseado no arquétipo de início rápido, com a ID do Grupo definida como "one.digitalinnovation" e a ID do Artefato definida como "quick-start-maven".

    Comando que auxiliar no dia a dia
    - Compilar: compile mvn compile Ao executar o código mvn compile todos os códigos Java da aplicação são automaticamente compilados e inseridos na pasta target - Testar: test mvn test É possivel que mv encontre todas as classes de teste que existe no projeto e execute as respectivas validações que existe dentro de cada uma delas. - Empacotar: package mvn package Cria o Jar da aplicação e fica dentro da pasta target - Limpar diretório de trabalho: Clean mvn clear

    Referências | Referências | Referências

    Criando diferentes tipos de projeto
    - Maven archetype: template que possibilita a personalização e a configuração de como um projeto construído. Neste arquivo definimos versão de componentes, quais componentes vão inseridos automaticamente.

    archetype

    POM, dependências e repositórios

    POM
    POM (project object model) unidade fundamental de trabalho ele é em formato XML ele que vai detalha o projeto, como construir o projeto. Maven sempre procura pela pom.xml para realizar sua execução.
    Repositório

    repositorio de configuração

    Como adicionar dependências

    Entre nesse site e procure por "Hibernate-validator":

    image

    Clique na última versão: image

    Copie o código: image

    E adicione no pom.xml abaixo das

    bash <dependencies> <dependency> </dependency>

    depois volte no terminal e copile o projeto mvn compile.

    Gerenciando dependências

    Tipos de dependência
    mvn install

    Direta: dependências declaradas no pom.xml Transitiva: dependências obrigatórias das dependências declaradas no pom.xml

    Transitividades e Escopos
    _O Maven_
    • Runtime (tempo de execução)
    • Test (teste)
    • Compile (compilar)

    Escopo Compile

    • escopo default
    • Disponível em todos os classpaths
    • É transitivo

    Escopo probided

    • Indica que a dependência será fornecida em tempo de execução por uma implementação na JDK ou via container.
    • Exemplos: Servlet API, Java EE APIs
    • A dependência com esse escopo é adicionado no classpath usado para compilação(compile) e teste(test) mas não em runtime;
    • Não é transitiva.

    <scope>provided</scope>

    Escopo runtime

    • Indica que a dependência é necessária para execução e não para compilação
    • Maven inclui no classpath dos escopos de runtime e test
    <dependency>
        <groupId>msql</groupId>
        <artifactId>msql-connector-java</artifactId>
        <version>6.0.6</version>
        <scope>provided</scope>
    </dependency>

    Escopo test

    • Disponível somente para compilação e execução de testes;
    • Não é transitivo.
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupier-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    Escopo system

    • Similar ao escopo provided exceto por ser necessário prover o JAR explicitamente;
    • A dependência com esse escopo é adicionado no classpath usado para compilação(compile) e teste(test) mas não em rutime;
    • Não é transitiva.
    <dependency>
        <groupId>com.baeldung</groupId>
        <artifactId>custom-dependency</artifactId>
        <version>1.3.2</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/costom-dependency-1.3.2.jar</systemPath>
    </dependency>

    Escopo import

    • Este escopo é disponível apenas com uma dependência do tipo pom e com tag
    • Indica um processo de reutilizar dependências de um projeto.
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.programmergirl</groupId>
                <artifactId>my-project</artifactId>
                <version>1.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    Dicas sobre escopos, dependências opcionais e exclusions
    Como ver o classpath

    mvn dependency:build-classpath -DincludeScope=complie mvn dependency:build-classpath -DincludeScope=teste mvn dependency:build-classpath -DincludeScope=runtime

    dependências opcionais Utilizado quando uma dependência não é necessária para os projetos que irão reutilizar seu componente.

     <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.8.8</version>
          <optional>true</optional>
     </dependency>

    Exclusions Utilizado quando o componente que você usa compartilha uma biblioteca que você já tem ou não quer ter disponívell.

    <dependency> 
            <exclusions>
            <exclusion>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
            </exclusion>
        </exclusions>
    </dependency>  

    Maven Build Lifecycle

    - Conceito de ciclo de vida de construção; - Conceito e os comandos da ferramenta; - Composto por 3 ciclor de vida; - Cada ciclo possui fases (Maven Phases) - Cada fase possui objetivos (Maven Goals)
    <p></p>
    

    como é o ciclo de vida

    image

    Default lifecycle

    image

    Principal ciclo responsável pelo deploy local e é composto por 23 fases:

    • validate
    • compile
    • test-compile
    • test
    • integration-tes
    • package
    • install
    • deploy

    Clean lifecycle

    image

    Ciclo intermediário responsável pela limpeza do projeto e é composto por 3 fases:

    • pre-clean
    • clean
    • post-clean

    Site lifecycle

    image

    Ciclo final responsável pela criação do site de documentação do projeto composto por 4 fases:

    • pre-site
    • site
    • post-site
    • site-deploy

    Projetos Multi-módulos

    image

    mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=projec-parent -Darchetype=maven-quick-star

    Define value for property 'version' 1.0-SNAPSHOT: :

    Entre no arquivo pom e inclua o packaging:

    image

    Feito isso volte ao terminal entre nesse pasta e execute os seguintes comando:

    // criar o projeto "core"
    mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=core Darchetype=maven-quick-star -DinteractiveMode=false  
        
    // criar o projeto "service"
    mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=service Darchetype=maven-quick-star -DinteractiveMode=false      
    
    // criar o projeto "controller"
    mvn archetype:generate -DgroupId=one.digital.innovation -Dartifact=controller Darchetype=maven-quick-star -DinteractiveMode=false

    Plugins

    A maioria das funcionalidades são providas por plugis, estilo arquitetural para extensibilidade (criar seu próprio plugin). Escrito prioritariamente em Java e disponibilizados comumente como JARs.

    Plugins Maven

    image

    Principais Plugins

    • eclipse - war
    • jacoco - compile
    • ear - clean
    • checkstyle - javadoc

    Uso do Puglin

    `` // formato:
    mvn [plugin-name]:[goal-name]

    // exemplo:
    mvn javadoc:javadoc
    ``

    <p>A configuração de um plugin é sempre feita pela tag <code>build</code></p>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>        
        </plugins>    

    documentação maven plugins

    Conclusão

    - 🔗[documentação](https://maven.apache.org/guides/)

    📝 QUIZ - Conclusão Maven

    1- Quando o Maven executa algum tarefa e não encontra a dependência no repositório local o que acontece ?

    R: O Maven busca a dependência em um reposiório e faz download e armazena o componente no repositório local

    2- Sobre o pom.xml, não é correto afirmar:

    R: É um arquivo de configuração do Maven

    3- Quais são os comandos para testar, empacotar, compilar e limpar o projeto, respectivamente ?

    R: mvn test, mvn package, mvn compile, mvn clean

    4- O Maven proporciona uma forma automatizada de criar projetos. Qual o nome do recurso e comando é utilizado para executar esta tarefa ?

    R: O recurso é Maven Archetype. O comando é mvn archetype:generate

    5- Qual comando no maven possibilita verificar dependências que não estão sendo utilizadas ?

    R: mvn dependency:analyze

    6- Quais são os escopos de dependência que existem ? Qual é o escopo padrão ?

    R: Os escopos são compile, provided, runtime, test, system, import. O escopo padrão é compile.

    7- Quais são os três ciclos de vida integrados do Maven para construir e distribuir um projeto?

    R:default, clean, site

    8- O que são repositórios para o Maven ?

    R: Um repositório no Maven contém artefatos de construção e dependências de vários tipos.

    9- Qual o nome dado para dependências que são herdadas indiretamente quando passamos a utilizar um novo componente ?

    R: Dependências transitivas

    10- O que é o Maven ?

    R: Ferramenta para gerenciar build e dependências de um projeto

    6.3 Imersão no Spring Framework com Spring Boot

    📝 QUIZ -

    - 🗂️📑[slides] - ✅

    Professor: Gleyson Sampaio

    Apresenção Inicial

    Apresenção e visão geral do cusro
    ▫ Criar um projeto Web; ▫ Configurar Controllers; ▫ Documentar a API com Swagger; ▫ Tratamento de exceções com Handlers;

    Projeto Springboot

    Criando uma REST API
    *SPRING WEB* - REST e RESTful - Controllers - Swagger - Exception Handler

    Implementar recursos HTTP para interação de arquivos json pelas aplicações.

    O que é uma API?

    Uma API (interface application program) é um código programável que faz a "ponte" de comunicação entre duas aplicações distintas.

    REST e RESTful

    A API REST(representational state transfer) é como um guia de boas práticas e RESTful é a capacidade de determinado sistema aplicar os princípios de REST.

    Princípios

    Para que uma arquitetura seja RESTful, é necessário ter uma série de princípios ou padrões:

    ☑️ cliente-servidor : siginifica aprimorar a portabilidade entre várias plataformas de interface do usuário e do servidor, permitindo uma evolução independente do sitema;

    ☑️ interface uniforma: representa uma interação uniforme entre clientes e servidor. Para isso, é preciso ter uma interface que identifique e represente recursos, mensagens autodescritivas, bem com hypermedia(HATEOAS);

    ☑️ stateless: indica que a cada inteção via API tem acesso a dados completos e compreensíveis;

    ☑️ cache - necessário para reduzir o tempo médio de resposta, melhorar eficiência, desempenho e escalabilidade da comunicação;

    ☑️ camadas - permite que a arquitetura seja menos compleza e altamente flexível.

    Nível de Maturidade

    Para padronizar e facilitar o desenvolvimento de APIs REST, Leonardo Richardson propôs um modelo de maturidade para esse tipo de API, definido em 4 níveis:

    image

    Nível 0: Ausência de Regras

    Esse é consiferado o nível mais básico de uma API, quem implementa apenas esse nível não pode ser considerada REST pois não segue qualquer padrão.


    Verbo HTTP URI Operação
    POST /getUsuario Pesquisar Usuario
    POST /salvarUsuario Salvar
    POST /alterarUsuario Alterar
    POST /excluirUsuario Deletar

    Um único verbo com nomes que não seguem nenhum padrão

    Nível 1: Aplicação de Recursos

    Observe que o nome dos recursos foram equalizados e para não gerar ambiguidade é necessário definir o verblo apropriadamente.


    Verbo HTTP URI Operação
    GET /usuarios/1 Pesquisar Usuario
    POST /usuarios Salvar
    PUT /usuarios/1 Alterar
    DELETE /usuarios/1 Deletar

    Nível 2: Implementação de verbos HTTP

    Como a definição dos verbos já foi requisitada no Nível 1, o Nível 2 s encarrega de validar a aplicabilidade dos verbos para finalizades específicas como:


    Verbo HTTP Função
    GET Retornar dados
    POST Grava dados
    PUT Alterar dados
    DELETE Remove dados

    Note Existe uma discussão quando precisamos retornar dados, através de parâmentos via body, recebidos pelo método POST.

    Nível 3: HATEOAS

    HATEOAS significa Hypermedia as the Engine of Applications State . Uma API que implementa esse nível fornece aos seus clientes links que indicarão como poderá ser feita a navegação entre seus recursos. Ou seja, quem for consumir API precisará saber apenas a rota principal e a resposta dessa requisição terá todas as demais rotas possíveis.

    Note O nível 3 é sem dúvidas o menos explorado, muitas APIs existentes no mercado não implementam esse nível.

    image

    No exemplo acima, podemos ver o resultado de uma API que implementa HATEAOS, veja que na resposta dessa API há uma coleção "link", cada link aponta para uma rota dessa API. No caso desse exemplo, temos um link para a própria rota, um link para alterar um cliente e outra para excluir.

    Passo a passo para criar seu primeiro projeto Spring Boot e maven.

    RestController
    Documentando nossa API com SWAGGER
    Habilitando o tratamento de exeções de negócios com handlers

    Conclusão

    ✅ Criamos de um projeto Web;

    ✅ Estrurturamos nossos Controllers;

    ✅ Documentamos nossa API;

    ✅ Habilitamos tratamento de exceções;

    ✅ Interafimos com a API via Postman.

    🚀 REST e RESTful | API REST e RESTful | Handling | Exception handler

    📝 QUIZ - Criando uma API REST Documentada com Spring Web e Swagger

    1- "Um manipulador de exceção é o código que estipula o que um programa fará quando um evento anômalo interromper o fluxo normal das instruções deste programa."

    A afirmativa acima, se trata do conceito de:

    <R: Exception Handler

    2- O que você entende por Swagger:

    3- O que é o Postman?

    4- O endpoint “/usuarios/1“ seguindo o padrão RESTful, é comumente utilizado com alguns métodos HTTP, exceto:

    5- O que significa o acrônimo CRUD?

    6- Seguindo a metodologia RESTful, para que serve o método HTTP “GET”?

    7- “É a camada da aplicação que lida com as requisições dos usuários.” Estamos falando de qual camada?

    8- Qual a função da anotação @RestController?

    9- Como podemos definir uma API?

    10- “É a URL onde seu serviço pode ser acessado por uma aplicação cliente.“. Na frase citada, simplificamos o conceito de:

    6.5 Explorndo Padrões de Projetos na Prática com Java

    📝 QUIZ -

    - 🗂️📑[slides] - ✅ [Certificado](

    7 - Dominando Algoritmos Intermediarios com Desafios de Codigo Java

    7.1 Desafio - Salvando Músicas

    Desafio Sua irmã está com o computador muito lento e pediu para você formata-lo. Mas ela gostaria muito de que todas as músicas dela fossem salvas e não deletadas com o resto dos arquivos durante a formatação. Todas as músicas estão no formato .mp3 Crie um programa que cada arquivo com esse formato não seja deletado. Entrada A entrada será uma String com o nome da música e seu formato.

    Saída A saída deve ser se o arquivo será salvo ou não. Exemplo:


    Entrada Saída
    "minhasamigas.png" "Deletar"
    "Californication.mp3" "Salvar"
    "Zeca Pagodinho - Algum Completo.rar" "Deletar"

    import java.util.Scanner;
    
    public class SalvandoMusica {
        public static void main(String[] args) {
            Scanner leitor = new Scanner(System.in);
            String arquivoDoPc = leitor.next();
            
            if(arquivoDoPc.endsWith(".mp3")){
              System.out.println("Salvar");
            } else {
              System.out.println("Deletar");
            }
    
        }
    }

    7.2 Desafio - Pontos na carteira

    Desafio A prefeitura da cidade B, inspirada por uma cidade A, decidiu implementar um sistema de câmeras que iria verificar se os carros estão acima de 80km/h. Porém, eles queriam também anotar a placa dos carros no banco de dados para que, a partir de 3 multas, os motoristas perdessem pontos diretamente na carteira de habilitação. Para isso, contrataram você para realizar esse programa, logo que você fez um trabalho tão bom para a cidade A.

    Lembrando que toda vez que um carro é pego pela câmera e está acima da velocidade permitida automaticamente já é contabilizado uma multa para ele.

    Entrada A entrada será a velocidade que o veículo está e quantas multas ele já recebeu. Se ele estiver acima da velocidade, deve ser somado mais uma multa.

    Saida A saída deverá ser quantas multas o motorista já tem e se ele irá receber pontuação na carteira de habilitação.

    Exemplo:

    Entrada Saída
    80 "1 multas. Nao levou pontos na
    1 carteira"
    85 "2 multas. Nao levou pontos na
    1 carteira"
    95 "3 multas. Levou pontos na
    2 carteira"
    import java.util.Scanner;
        
    public class PontosCarteira {
        public static void main(String[] args) {
            try (Scanner leitor = new Scanner(System.in)) {
                int velocidade = leitor.nextInt();
                int multas = leitor.nextInt();
    
    
                if(velocidade>80){
                    multas ++;
                }
                System.out.printf((multas<=2) ? multas+" multas. Nao levou pontos na carteira" : multas+" multas. Levou pontos na carteira");
            }
        }
    }
        

    7.3 Desafio - Imóvel Diponíveis

    Desafio O seu amigo quer verificar quais os imóveis estão disponíveis em uma certa corretora na região onde ele mora. A corretora disponibilizou uma API para ele, mas como ele não entende nada de programação, pediu a sua ajuda. Para deixar tudo bonitinho, você resolveu criar um aplicativo para seu querido amigo, mas quando foi olhar a API retornava os dados de uma forma esquisita, separado por barras. Ajude seu amigo deixando a informação mais amigável possível.

    Entrada A entrada será a classificação do imóvel, o valor do aluguel dele e se ele está disponível no momento.

    Saída A saída deverá ser as informações da entrada, porém de uma forma mais amigável. (sem as aspas)

    Exemplo:

    Entrada Saida
    Casa/1900/Disponivel "Imovel: Casa R$1900 Disponivel"
    Apartamento/850/Indisponivel "Imovel: Apartamento R$850 Indisponivel"
    import java.util.Scanner;
        
    public class ImoveisDisponiveis {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String entrada = scanner.nextLine();  
            String[] dados = entrada.split("/");  
            String classificacao = dados[0];
            int valorAluguel = Integer.parseInt(dados[1]);
            String disponibilidade = dados[2];
            String saida = "Imovel: " + classificacao + " R$" + valorAluguel + " " + disponibilidade;
            System.out.println(saida);
        }
    }   

    7.4 Desafio - Dc Monals

    Desafio Você levou sua namorada na incrível rede de lanchonetes Dc Monalds e ficou maravilhado como aquele lanche era gostoso. Porém, ficou horrorizado como algumas coisas no aplicativo do cardápio estavam erradas. Então, você se ofereceu para ajudá-los com seus conhecimentos de programação. Ao conversar com o gerente, ele te explicou que a vontade da lanchonete era criar um menu com os nomes dos ingredientes formando o lanche, como no exemplo abaixo:

    Pao Presunto Carne Pao

    Ajude o restaurante a programar isso.

    Entrada A entrada serão os ingredientes que compõem o lanche.

    Saída A saída deverá ser o lanche montado com as palavras que definem os ingredientes.

    Exemplo:

    Entrada Saida
    Pao;Presunto;Carne;Pao Pao
    Presunto
    Carne
    Pao
    Pao;Picles;Tomate;Pao Pao
    Picles
    Tomate
    Pao
    Pao;Tomate;Carne;Pao Pao
    Tomate
    Carne
    Pao
    import java.util.Scanner;    
        
    public class DcMonalds {
        public static void main(String[] args) {
            Scanner leitor = new Scanner(System.in);
            String ingredientes = leitor.next();
            String[] listaIngredientes = ingredientes.split(";");
    
            System.out.println(listaIngredientes[0]);
            for (int i = 1; i < listaIngredientes.length - 1; i++) {
                System.out.println(listaIngredientes[i]);
            }
            System.out.println(listaIngredientes[listaIngredientes.length - 1]);
        }
    } 

    7.5 Desafio - Camarote do Blue Cold Ice Cubes

    Desafio No show da famosa banda Blue Cold Ice Cubes o vocalista, Antônio Queda, escolheu todas as pessoas que estavam na posição impar da fila para entrarem no camarote. Ele fez isso em diversos shows e as pessoas foram a loucura para competirem por essas posições. Você resolveu criar um programa para saber, de acordo com o número de pessoas na fila, quantas entrariam no camarote.

    Entrada A entrada será o tamanho da fila que aguardava para ver o show.

    Saída A saída deve ser o número de pessoas que foram colocadas no camarote. (sem as aspas)

    Exemplo:

    Entrada Saída
    100 "50 pessoas no camarote"
    40 "20 pessoas no camarote"
    25 "13 pessoas no camarote"
    import java.util.Scanner;
    
    public class CamaroteBlue {
        public static void main(String[] args) {
            Scanner leitor = new Scanner(System.in);
    
            int tamanhoDaFila = leitor.nextInt();
            int pessoasNoCamarote = (tamanhoDaFila +1) / 2;
    
            System.out.println(pessoasNoCamarote + " pessoas no camarote");
        }
    }
    import java.util.Scanner;
    
    public class CamaroteBlue {
        public static void main(String[] args) {
            Scanner leitor = new Scanner(System.in);
            int tamanhoDaFila = leitor.nextInt();
            int pessoasNoCamarote = 0;
            for(int i=0; i<=tamanhoDaFila; i++){
              if(i % 2 != 0){
                pessoasNoCamarote++;
              }
            }  
              System.out.println(pessoasNoCamarote + " pessoas no camarote");
        }
    }

    👩🏻‍🎓 Certificado de conclusão
    By: Amanda Ribeiro

    About

    Módulos sobre a linguagem Java que vão desde o básico e introdução ao ambiente até códigos mais avançados e frameworks mais usados.

    Topics

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages