Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Java Básico - Exercícios Resolvidos 25 - Um programa que lê quatro notas, calcula a média aritmética e informa se o aluno foi aprovado ou reprovado - Desafio de Programação Resolvido em JavaQuantidade de visualizações: 7937 vezes |
Pergunta/Tarefa: Escreva um programa Java que receba quatro notas de um aluno (como double), calcule e mostre a média aritmética das notas e a mensagem de aprovado ou reprovado, considerando para aprovação a média 7,0. Sua saída deverá ser parecida com: ![]() Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos solicitar as quatro notas do aluno double n1, n2, n3, n4, media; System.out.print("Informe a primeira nota: "); n1 = Double.parseDouble(entrada.nextLine()); System.out.print("Informe a segunda nota: "); n2 = Double.parseDouble(entrada.nextLine()); System.out.print("Informe a terceira nota: "); n3 = Double.parseDouble(entrada.nextLine()); System.out.print("Informe a quarta nota: "); n4 = Double.parseDouble(entrada.nextLine()); // vamos calcular a média aritmética media = (n1 + n2 + n3 + n4) / 4; System.out.println("A média obtida foi: " + media); // vamos verificar se o aluno foi aprovado ou reprovado if(media >= 7.0){ System.out.println("O aluno foi aprovado"); } else{ System.out.println("O aluno foi reprovado"); } System.out.println("\n"); } } |
![]() |
Java ::: Dicas & Truques ::: Formulários e Janelas |
Como definir a cor de fundo para a janela JFrame de sua aplicação Java SwingQuantidade de visualizações: 15771 vezes |
Nesta dica mostrarei como é possível definir a cor de fundo para uma janela JFrame. O truque aqui é obter o painel de conteúdo da JFrame usando o método getContentPane() e, em seguida, usar o método setBackground() da classe Container fornecendo a cor desejada. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; import java.awt.*; import javax.swing.*; public class Estudos extends JFrame{ public Estudos() { super("A classe JFrame"); Container c = getContentPane(); c.setLayout(new FlowLayout(FlowLayout.LEFT)); // Define a cor de fundo c.setBackground(Color.CYAN); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercício Resolvido de Java - Como rotacionar os elementos de um vetor de inteiros n vezes para a direita - Solução usando vetor temporárioQuantidade de visualizações: 624 vezes |
Pergunta/Tarefa: Dado o vetor: // vamos criar um vetor de inteiros int valores[] = {1, 6, 9, 3, 7, 8, 5, 2}; Importante: a solução que apresentamos usa um array adicional para resolver o desafio. Fique à vontade para usar força-bruta ou outra abordagem que achar mais conveniente. Sua saída deverá ser parecida com: Array na ordem original: 1 6 9 3 7 8 5 2 Rotação do vetor no passo 1 do primeiro laço: 8 0 0 0 0 0 0 0 Rotação do vetor no passo 2 do primeiro laço: 8 5 0 0 0 0 0 0 Rotação do vetor no passo 3 do primeiro laço: 8 5 2 0 0 0 0 0 Rotação do vetor no passo 1 do segundo laço: 8 5 2 1 0 0 0 0 Rotação do vetor no passo 2 do segundo laço: 8 5 2 1 6 0 0 0 Rotação do vetor no passo 3 do segundo laço: 8 5 2 1 6 9 0 0 Rotação do vetor no passo 4 do segundo laço: 8 5 2 1 6 9 3 0 Rotação do vetor no passo 5 do segundo laço: 8 5 2 1 6 9 3 7 Array depois de rotacionar 3 vezes: 8 5 2 1 6 9 3 7 Veja a resolução comentada deste exercício em Java: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; public class Estudos { public static void main(String[] args) { // vamos criar um vetor de inteiros int valores[] = {1, 6, 9, 3, 7, 8, 5, 2}; // mostramos o array na ordem original System.out.println("Array na ordem original:"); exibirVetor(valores); // vamos rotacionar o array 3 casas para a direita valores = rotacionarArray(valores, 3); // e mostramos o resultado System.out.println("Array depois de rotacionar 3 vezes:"); exibirVetor(valores); } // método usado para exibir o array public static void exibirVetor(int []vetor){ // percorremos cada elemento do vetor for (int i = 0; i < vetor.length; i++) { System.out.print(vetor[i] + " "); } System.out.println("\n"); } // método que recebe um vetor de inteiros e o rotaciona um // determinado número de vezes public static int[] rotacionarArray(int[] vetor, int n) { // vamos obter a quantidade de elementos no vetor int quant = vetor.length; // o número de rotações é maior que a quantidade de // elementos no vetor? Se for nós ajustamos o número // de rotações usando o operador de módulo if(n > quant){ n = n % quant; } // criamos um vetor temporário int[] resultado = new int[quant]; // o primeiro laço movimenta os elementos a partir // do valor de n for(int i = 0; i < n; i++){ resultado[i] = vetor[quant - n + i]; // mostramos o progresso System.out.println("Rotação do vetor no passo " + (i + 1) + " do primeiro laço:"); exibirVetor(resultado); } // ajustamos o índice para o primeiro elemento do vetor int indice = 0; for(int i = n; i < quant; i++){ resultado[i] = vetor[indice]; // mostramos o progresso System.out.println("Rotação do vetor no passo " + (indice + 1) + " do segundo laço:"); exibirVetor(resultado); indice++; // incrementa o índice } // retorna o vetor rotacionado return resultado; } } A solução que apresentamos aqui usa um vetor temporário, isto é, um array adicional, para melhorar a perfomance. Em outras dicas do site nós apresentamos uma solução para este desafio usando força-bruta. A força-bruta não é a melhor abordagem, mas pode ser mais fácil de ser entendida por iniciantes em programação. |
Java ::: Pacote java.awt ::: Graphics |
Como retornar a cor atual do contexto de desenho usando o método getColor() da classe Graphics do Java - Computação gráfica em JavaQuantidade de visualizações: 7884 vezes |
Antes de efetuar qualquer desenho na superfície de um componente, é importante saber qual cor está definida no momento, assim podemos alterá-la se necessário. Para isso podemos usar o método getColor() da classe Graphics. Este método retorna um objeto da classe Color. Veja um exemplo no qual obtemos a cor usada atualmente para desenhar na superfície de um JLabel: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Estudos extends JFrame{ JLabel label; public Estudos() { super("Desenhando"); Container c = getContentPane(); c.setLayout(new BorderLayout()); // Cria um JLabel label = new JLabel(); c.add(label, BorderLayout.CENTER); // Cria um botão JButton btn = new JButton("Obter a cor do contexto"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ Graphics graphics = label.getGraphics(); // obtém a cor usada para desenhar no // contexto de desenho Color cor = graphics.getColor(); JOptionPane.showMessageDialog(null, "A cor usada atualmente é " + cor.toString()); } } ); // Adiciona o botão à janela c.add(btn, BorderLayout.SOUTH); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Ao executar este código Java nós teremos o seguinte resultado: A cor usada atualmente é java.awt.Color[r=0,g=0,b=0] |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar null em JavaQuantidade de visualizações: 31861 vezes |
O tipo de dados null é um tipo (ou valor) especial que indica que uma referência não está apontando para nenhum objeto, ou seja, aponta para uma posição de memória nula. Este tipo pode ser atribuído (ou testado) apenas a referências. Seu uso não é permitido com primitivos. Veja um trecho de código no qual definimos que uma variável do tipo String aponta para um objeto nulo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ String nome = null; System.out.println(nome.length()); System.exit(0); } } Este código compila normalmente. Porém, ao tentarmos executá-lo, temos uma exceção de tempo de execução NullPointerException: Exception in thread "main" java.lang.NullPointerException at Estudos.main(Estudos.java:5) Isso aconteceu porque estamos tentando executar um método de um objeto que não existe. Uma técnica muito valiosa é testar se uma referência não está apontando para um objeto nulo. Veja como isso é feito: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ String nome = null; if(nome != null) System.out.println(nome.length()); else System.out.println("Objeto é nulo."); System.exit(0); } } Tenha em mente que, quando uma referência recebe o valor null, o objeto para o qual ela apontava fica imediatamente disponível para o coletor de lixo (Garbagge Colector), ou seja, a memória ocupada pelo objeto pode ser liberada a qualquer momento. Veja agora o que acontece quando tentamos atribuir o valor null a um primitivo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ int valor = null; System.exit(0); } } Eis a mensagem de erro de compilação: Estudos.java:3: incompatible types found : <nulltype> required: int int valor = null; ^ 1 error |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercícios Resolvidos de Java - Usando laços for aninhados para desenhar uma pirâmide de números em Java (com o usuário informando a quantidade de linhas)Quantidade de visualizações: 8759 vezes |
Pergunta/Tarefa: Escreva um programa Java que solicita ao usuário um número inteiro. Este número inteiro deverá estar entre 1 e 12 e será usado como a quantidade de linhas em uma pirâmide de números. Você deverá usar laços for aninhados para controlar as linhas e montar a estrutura desejada. Sua saída deverá ser parecida com: Informe a quantidade de linhas: 5 1 2 1 2 3 2 1 2 3 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5 Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // vamos fazer a leitura usando a classe Scanner Scanner entrada = new Scanner(System.in); // vamos solicitar a quantidade de linhas System.out.print("Informe a quantidade de linhas: "); int numLinhas = Integer.parseInt(entrada.nextLine()); // não queremos aceitar quantidades de linhas menores que 1 // ou maiores que 12 if((numLinhas < 1) || (numLinhas > 12)){ System.out.println("O número de linhas deve estar entre 1 e 12"); System.exit(0); } // este laço externo controla as linhas System.out.println(); for(int linha = 1; linha <= numLinhas; linha++){ // este laço gera os espaços antes de cada número nas // linhas da pirâmide for (int coluna = 1; coluna <= (numLinhas - linha); coluna++){ System.out.print(" "); // três espaços aqui } // aqui nós exibimos os números de cada linha do lado // esquerdo da pirâmide, até o centro for(int i = linha; i >= 1; i--){ // o número da linha é maior ou igual a 10? se for // colocamos um espaço antes do número if(i >= 10){ System.out.print(" " + i); } else{ // o número da linha é menor que 10? vamos //colocar dois espaços antes do número System.out.print(" " + i); } } // e finalmente exibimos os números de cada linha no // lado direito da pirâmide for (int i = 2; i <= linha; i++){ // o número da linha é maior ou igual a 10? se for // colocamos um espaço antes do número if(i >= 10){ System.out.print(" " + i); } else{ // o número da linha é menor que 10? vamos // colocar dois espaços antes do número System.out.print(" " + i); } } // gera uma nova linha System.out.println(); } System.out.println(); } } |
Java ::: Pacote java.awt.event ::: KeyEvent |
Java Swing - Como detectar as teclas Insert ou Delete usando o método getKeyCode() da classe KeyEvent do JavaQuantidade de visualizações: 3201 vezes |
Em algumas situações nós precisamos detectar o pressionamento das teclas Insert ou Delete. Para isso podemos usar o método getKeyCode() da classe KeyEvent e testar se o código equivale a uma das constantes KeyEvent.VK_INSERT (Ins) ou KeyEvent.VK_DELETE (Del). Veja um trecho de código no qual testamos se alguma destas duas teclas foi pressionada: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Janela extends JFrame implements KeyListener{ public Janela(){ super("Eventos do Teclado"); Container c = getContentPane(); FlowLayout layout = new FlowLayout(FlowLayout.LEFT); c.setLayout(layout); // vamos adicionar o objeto listener addKeyListener(this); setSize(350, 250); setVisible(true); } @Override public void keyPressed(KeyEvent e){ // a tecla Insert foi pressionada? if(e.getKeyCode() == KeyEvent.VK_INSERT){ JOptionPane.showMessageDialog(null, "A tecla Insert foi pressionada"); } // a tecla Enter Delete pressionada? else if(e.getKeyCode() == KeyEvent.VK_DELETE){ JOptionPane.showMessageDialog(null, "A tecla Delete foi pressionada"); } else{ JOptionPane.showMessageDialog(null, "Outra tecla foi pressionada"); } } @Override public void keyReleased(KeyEvent e){ // sem implementação } @Override public void keyTyped(KeyEvent e){ // sem implementação } public static void main(String args[]){ Janela j = new Janela(); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } É importante observar que as teclas Insert e Delete podem ser detectadas somente nos eventos keyPressed e keyReleased. |
Java ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Java Vetores e Matrizes - Como inicializar os elementos de um vetor usando o laço for da linguagem JavaQuantidade de visualizações: 9894 vezes |
Neste exemplo veremos como inicializar um vetor (array) de ints usando o laço for. Note que os elementos do array serão inicializados com os valores de 1 a 10. Veja o código completo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; public class Estudos{ public static void main(String[] args){ // vamos declarar e construir um vetor de 10 elementos int[] a = new int[10]; // inicializa os elementos do vetor for(int i = 0; i < a.length; i++){ a[i] = (i + 1); } // exibe os valores dos elementos do vetor for(int i = 0; i < a.length; i++){ System.out.print(a[i] + ", "); } System.exit(0); } } Ao executar este código Java nós teremos o seguinte resultado: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercícios Resolvidos de Java - Escreva um programa (algorítmo) Java que usa o laço do...while para ler um número indeterminado de idades. A condição de parada do laço é o valor da idade igual a 0Quantidade de visualizações: 9011 vezes |
Pergunta/Tarefa: Escreva um programa (algorítmo) Java que usa o laço do...while para ler um número indeterminado de idades de algumas pessoas. A condição de parada do laço é o valor da idade igual a 0. Calcule a escreva a idade média deste grupo de pessoas. Sua saída deverá ser parecida com: Informe a idade: 19 Informe a idade: 30 Informe a idade: 21 Informe a idade: 45 Informe a idade: 0 A idade média é: 28.75 Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package exercicios; import java.util.Scanner; public class Exercicios { public static void main(String[] args) { // vamos efetuar a leitura usando a classe Scanner Scanner entrada = new Scanner(System.in); int idade; // guarda a idade lida de cada indivíduo double idade_media; // a idade média calculada int soma = 0; // a soma das idades de cada indivíduo int contador = 0; // conta as idades lidas // laço do...while que repetirá até que o valor da idade seja 0 do{ System.out.print("Informe a idade: "); idade = Integer.parseInt(entrada.nextLine()); // a idade lida é diferente de 0? if(idade != 0){ soma = soma + idade; // soma mais esta idade contador++; // aumenta a quantidade de idades lidas } }while(idade != 0); // calcula a idade média // note que forcei contador para o tipo double antes da divisão // isso faz com que o resultado seja do tipo double idade_media = soma / (contador * 1.0); // finalmente mostramos o resultado System.out.println("A idade média é: " + idade_media); } } |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Número de Reynolds O número de Reynolds (abreviado como Re) é utilizado para o cálculo do regime de escoamento de um fluido no interior de um tubo ou de um duto. Considere que um sistema hidráulico opera com óleo SAE 10W, de densidade igual a 920kg/m3 e viscosidade dinâmica de 0,018kg/(m.s), à temperatura de 55°C. Sabendo que o fluido escoa a uma velocidade média de 0,147m/s, e que o tubo tem 1m de diâmetro, qual é o número de Reynolds para o escoamento? A) 7.513,33. B) 2.300. C) 112,65. D) 715,33. E) 1.126,50. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Hidrologia |
A Bacia Tocantins-Araguaia é a maior bacia hidrográfica totalmente brasileira. Além da sua importância econômica e ambiental, a referida bacia possui a maior ilha fluvial do mundo. Como é denominada essa ilha? A) Ilha do Marajó. B) Ilha do Bananal. C) Ilha Solteira. D) Ilha do Gurupá. E) Ilha do São Francisco. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Domínios de Deformações O dimensionamento de uma seção transversal de um elemento linear concreto armado, sujeito a solicitações normais, de acordo com a NBR 6118 - "Projeto de estruturas de concreto" - é realizado com base em hipóteses básicas. A respeito dessas hipóteses, analise as informações a seguir, indicando V para as verdadeiras e F para as falsas: ( ) A distribuição das deformações ocorre de forma não linear ao longo da altura da seção. ( ) As deformações nas barras de armadura são idênticas às deformações do concreto que as envolve. ( ) Admite-se que todas as tensões de tração existentes serão resistidas pelo concreto e pela armadura. ( ) Adota-se o diagrama parábola-retângulo idealizado para o concreto comprimido. Assinale a alternativa que contém a sequência correta: A) V - V - F - F. B) V - F - F - F. C) F - V - F - V. D) F - V - V - V. E) V - F - F - V. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
A responsabilidade moral A responsabilidade causal surge quando determinado evento ou estado causa outro. Por exemplo, um curto-circuito pode ser responsável por incêndio, um furacão por enchente e assim por diante. Na perspectiva de irmos para além da responsabilidade causal, pode-se dizer que a responsabilidade moral se refere: A) ao fato de viver em sociedade. B) às consequências das relações sociais. C) às ações nas relações sociais somente. D) ao convívio com outros humanos somente. E) às ações e suas consequências nas relações sociais. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Hidrostática |
Qual a massa, em quilograma, de um cubo maciço de lado igual a 5 cm que é fabricado de um material com massa específica de 11,3 g/cm3? A) 1,4125 kg B) 2,8250 kg C) 4,2375 kg D) 5,6500 kg E) 7,0625 kg Verificar Resposta Estudar Cards Todas as Questões |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |