Você está aqui: Java ::: Perguntas e Respostas ::: Programação Orientada a Objetos |
É possível sobrecarregar o método main() em Java?Quantidade de visualizações: 732 vezes |
O método main() pode ser sobrecarregado em Java? Esta pergunta quase sempre aparece em entrevistas para vagas de programação em Java ou em provas de certificação. E a resposta é: Sim, o método main() pode ser sobrecarregado em Java. A sobrecarga de métodos (method overloading) em Java ocorre quando temos, em uma mesma classe, dois ou mais métodos com o mesmo nome mas com um número diferente de parâmetros, diferentes tipos de parâmetros ou ambos. Assim, dê uma olhada no código Java abaixo e tente descobrir qual saída será produzida: ---------------------------------------------------------------------- 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 Principal { public static void main(String[] args, int tam) { System.out.println("Java é bom demais, mas PHP também é"); } public static void main(String[] args) { System.out.println("Gosto demais de programar em Java"); } public static void main(String nome, String[] args) { System.out.println("Já sei programar em Java e Delphi"); } } Acertou quem disse "Gosto demais de programar em Java", pois o interpretador vai sempre procurar o ponto de entrada marcado pelo método com a assinatura: public static void main(String[] args) |
![]() |
Java ::: Dicas & Truques ::: Data e Hora |
Java para iniciantes - Como usar a classe Date em suas aplicações JavaQuantidade de visualizações: 14077 vezes |
A classe Date pertence ao pacote java.util, e, embora muitos de seus métodos estejam em desuso (Deprecated), ainda encontraremos muito código Java que usa esta classe para trabalhar com datas e horas. Veja sua posição na hierarquia de classes 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 ---------------------------------------------------------------------- java.lang.Object java.util.Date Esta classe implementa as interfaces Serializable, Cloneable e Comparable<Date> e suas subclasses conhecidas são Date, Time, Timestamp (todas do pacote java.sql). As informações abaixo podem ser encontradas na documentação da classe Date. A classe Date representa um momento específico no tempo, com uma precisão de milisegundos. Antes do JDK 1.1, esta classe tinha duas funções adicionais. Ela permitia a interpretação de datas como valores de ano, mês, dia, hora, minuto e segundo. Também permitia a formatação e parsing de strings de datas. Infelizmente, a API para estas funções não facilitava a internacionalização. Assim, a partir do JDK 1.1, a classe Calendar deve ser usada para converter entre campos de datas e horas e a classe DateFormat deve ser usada para formatar e fazer o parsing de strings de datas. Os métodos correspondentes a estas funções estão em desuso (Deprecated) na classe Date. Embora a classe Date tenha sido projetada para refletir a hora universal coordenada (Coordinated Universal Time - UTC), ela pode não ser capaz de fazer isso corretamente, dependendo do sistema no qual a Java Virtual Machine esteja sendo executada. A grande maioria dos sistemas operacionais modernos assume que 1 dia = 24 × 60 × 60 = 86400 segundos em todos os casos. No UTC, contudo, de dois em dois anos, aproximadamente, há um segundo extra, chamado de "leap second" (a mesma idéia do ano bissexto). O leap second é sempre adicionado como o último segundo do dia e sempre nos dias 31 de dezembro ou 30 de junho. Por exemplo, o último minuto do ano de 1995 teve 61 segundos, graças ao segundo extra que foi adicionado. A maioria dos relógios dos computadores não são precisos o suficiente para refletir a distinção do leap second. Alguns padrões de computadores são definidos em termos da hora de Greenwich (Greenwich mean time - GMT), que é o equivalente ao Universal Time (UT). GMT é o nome "civil" para o padrão, UT é o nome "científico" para o mesmo padrão. A distinção entre UTC e UT é que UTC é baseado em um relógio atômico e UT é baseado em observações astronômicas, o que para todos os propósitos práticos não traz diferença significativa. Devido à rotação da terra não ser uniforme (ela desacelera ou acelera de formas complicadas), O UT nem sempre flui uniformente. Segundos extras (Leap seconds) são inseridos conforme necessário no UTC de forma a mantê-lo dentro dos 0.9 segundos do UT1, que é uma versão do UT com algumas correções aplicadas. Há outros sistemas de datas e horas também; por exemplo, a escala de tempo pelo sistema de posicionamento global baseado em satélite (satellite-based global positioning system - GPS) é sincronizado com o UTC mas não é ajustado para os segundos extras. Em todos os métodos da classe Date que aceitam ou retornam valores de ano, mês, dia, hora, minuto e segundos, as seguintes representações são usadas:
|
Java ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como obter o arco-seno de um ângulo em radianos usando o método asin() da classe Math da linguagem JavaQuantidade de visualizações: 13932 vezes |
Nesta dica eu mostrarei como podemos obter o arco seno (ou arco-seno) de um determinado ângulo (em radianos, não em graus). De acordo com a seguinte definição: Se seno(x) = y, então arcoseno(y) = x O arco-seno (geralmente abreviado como arcsen, ou arcsin) é parte das funções trigonométricas inversas, ou seja, ele é o inverso do seno. Dessa forma, se o seno é a relação entre o cateto oposto ao ângulo e a hipotenusa, o arcoseno parte dessa relação para encontrar o valor do ângulo. A classe Math, do pacote java.lang, possui o seguinte método: public static double asin(double a) Este método recebe um valor double e retorna também um valor double, na faixa (-PI / 2) <= x <= (PI / 2), onde x é o valor forcecido para o método. Veja o código 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; public class Estudos{ public static void main(String[] args){ double angulo = 0.5; System.out.println("O arco seno de " + angulo + " é " + Math.asin(angulo)); } } Ao executarmos este código nós teremos o seguinte resultado: O arco seno de 0.5 é 0.5235987755982989 Não se esqueça de que o resultado será em radianos. Assim, se efetuarmos o cálculo abaixo: Graus = Radianos * (180 / PI) Graus = 0.5235987755982989 * (180 / 3.14) Teremos o valor aproximado de 30.015216435571276 para o ângulo em graus. |
Java ::: Dicas & Truques ::: Arquivos e Diretórios |
Como usar o método createTempFile() da classe File da linguagem Java para criar um arquivo temporário, escrever nele e excluí-lo ao fechar o programa - RevisadoQuantidade de visualizações: 11 vezes |
Nesta dica mostrarei como é possível usar o método createTempFile() da classe File, do pacote java.io, para criar um arquivo temporário em Java. No exemplo vamos criar o arquivo, vamos escrever nele e depois excluí-lo ao fecharmos o programa. 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; import java.io.*; public class Estudos{ public static void main(String[] args){ // local de criação do arquivo String local = "C:\\estudos_java"; // vamos tentar criar o arquivo então try{ File arquivo = File.createTempFile("teste", ".txt", new File(local)); // vamos excluir o arquivo ao fechar a aplicação arquivo.deleteOnExit(); // escreve no arquivo temporário BufferedWriter out = new BufferedWriter(new FileWriter(arquivo)); out.write("Arquivo de Códigos"); out.close(); // trecho de código para fazer com o programa espere // uma tecla antes de fechar // Este procedimento é para que vc veja que o arquivo // temporario realmente foi criado no diretório indicado InputStreamReader ent = new InputStreamReader(System.in); BufferedReader cons = new BufferedReader(ent); System.out.println("Verifique se o arquivo foi criado com sucesso."); System.out.print("Digite alguma coisa e pressione Enter para sair: "); String tecla = cons.readLine(); } catch(IOException e){ System.out.println("Houve um erro: " + e.getMessage()); } } } Ao executarmos este código nós teremos o seguinte resultado: Verifique se o arquivo foi criado com sucesso. Digite alguma coisa e pressione Enter para sair: b Antes de digitar alguma coisa e pressionar Enter, olhe no diretório "C:\\estudos_java" (o seu vai ser diferente, é claro) e você verá um arquivo com um nome parecido com: teste2606085315507863387.txt Quando você pressionar Enter, o programa terminará e o arquivo será excluído automaticamente. Esta dica foi revisada e testada no Java 8. |
Java ::: Fundamentos da Linguagem ::: Laços de Repetição |
Como usar o laço while da linguagem Java - Java para iniciantesQuantidade de visualizações: 17375 vezes |
O laço while é usado quando queremos executar um bloco de códigos continuamente até uma condição seja verdadeira. Veja sua estrutura:---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- while(condição){ // bloco de códigos } Diferente de C e C++, a condição a ser testada no while do Java deve sempre retornar um valor boolean. E, muito cuidado deve ser tomado para não produzirmos laços infinitos, ou seja, a condição sendo testada nunca retornará um valor false. Veja um trecho de código no qual exibimos os números pares de 0 a 20: ---------------------------------------------------------------------- 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 numero = 0; while(numero <= 20){ System.out.println(numero); numero++; } System.exit(0); } } Veja outro exemplo no qual o laço while é executado até que o usuário digite "fim": ---------------------------------------------------------------------- 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.util.*; public class Estudos{ public static void main(String args[]){ Scanner in = new Scanner(System.in); String palavra = ""; while(!palavra.equals("fim")){ System.out.print("Digite uma palavra: "); palavra = in.nextLine(); System.out.println("Você escreveu: " + palavra); } System.exit(0); } } Para finalizar, lembre-se de que o laço while é executado somente enquanto a condição testada for verdadeira. Isso quer dizer que, se na primeira tentativa de execução, a condição já for falsa, o laço nunca será executado. |
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 ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercícios Resolvidos de Java - Usando o laço while para encontrar o MDC (Máximo Divisor Comum) de dois númerosQuantidade de visualizações: 2035 vezes |
Pergunta/Tarefa: Escreva um programa Java que usa o laço while para calcular o MDC (Máximo Divisor Comum) de dois números. Sejam a, b e c números inteiros não nulos, dizemos que c é um divisor comum de a e b se c divide a (escrevemos c|a) e c divide b (c|b). Chamaremos D(a,b) o conjunto de todos os divisores comum de a e b. Sua saída deve ser parecida com: Informe o primeiro número: 16 Informe o segundo número: 24 O MDC de 16 e 24 é: 8 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 que o usuário informe dois números System.out.print("Informe o primeiro número: "); int n1 = Integer.parseInt(entrada.nextLine()); System.out.print("Informe o segundo número: "); int n2 = Integer.parseInt(entrada.nextLine()); int mdc = 1; // partimos do principio de que 1 é o MDC inicial int k = 2; // MDC possível while((k <= n1) && (k <= n2)){ // enquanto k for menor ou igual aos dois números if((n1 % k == 0) && (n2 % k == 0)){ mdc = k; // já temos um novo MDC } k++; // buscamos o novo MDC } // mostramos o resultado System.out.println("O MDC de " + n1 + " e " + n2 + " é: " + mdc); System.out.println("\n"); } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Strings e Caracteres |
Exercícios Resolvidos de Java - O caractere ausente. Escreva um método Java que receba uma string não vazia e um inteiro positivo.Quantidade de visualizações: 896 vezes |
Pergunta/Tarefa: O desafio do caractere faltante. Escreva um programa Java contendo um método que receberá uma palavra, frase ou texto e um inteiro positivo. Este método deverá retornar a palavra, frase ou texto com o caractere removido no índice especificado pelo inteiro fornecido como segundo argumento para o método. Certifique-se de que a string passada para o método não esteja vazia e de que o valor inteiro no segundo argumento não esteja fora da faixa permitida, ou seja, não seja menor que 0 nem maior que o comprimento da string - 1. Sua saída deverá ser parecida com: Informe uma palavra, frase ou texto: JAVASCRIPT Informe um número inteiro: 4 O resultado é: JAVACRIPT Veja a resolução comentada deste exercício usando 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; import java.util.Scanner; public class Estudos{ public static void main(String args[]){ // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos pedir para o usuário informar uma palavra, frase ou texto System.out.print("Informe uma palavra, frase ou texto: "); String str = entrada.nextLine().trim(); // agora vamos pedir para o usuário informar um número inteiro System.out.print("Informe um número inteiro: "); int indice = Integer.parseInt(entrada.nextLine()); // os dados são válidos? if(str.isEmpty()){ System.out.println("\nA string informada está vazia\n"); } else if(indice < 0 || indice > str.length() - 1){ System.out.println("\nO índice não está na faiza permitida\n"); } else{ String resultado = caractereFaltante(str, indice); System.out.println("O resultado é: " + resultado); } } public static String caractereFaltante(String str, int indice){ // primeiro nós obtemos uma substring que vai do primeiro // índice até o indice informado pelo usuário, sem incluí-lo String inicio = str.substring(0, indice); // agora obtemos o restante da string a partir do índice informado // pelo usuário, sem incluí-lo, é claro String fim = str.substring(indice + 1, str.length()); return inicio + fim; } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercício Resolvido de Java - Um método recursivo que calcula o número de Fibonacci para um dado índiceQuantidade de visualizações: 6927 vezes |
Pergunta/Tarefa: Observe a série de números Fibonacci abaixo: Série: 0 1 1 2 3 5 8 13 21 34 55 89 Índice: 0 1 2 3 4 5 6 7 8 9 10 11 Este algorítmos consiste em, dado um determinado índice, retornar o número de Fibonacci correspondente. Recursivamente, o cálculo pode ser feito da seguinte forma: fib(0) = 0; fib(1) = 1; fib(indice) = fib(indice - 2) + fib(indice - 1); sendo o indice >= 2 Os casos nos quais os índices são 0 ou 1 são os casos bases (aqueles que indicam que a recursividade deve parar). Seu método deverá possuir a seguinte assinatura: public static int fibonacci(int indice){ // sua implementação aqui } Informe o índice: 6 O número de Fibonacci no índice informado é: 8 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) { // cria um novo objeto da classe Scanner Scanner entrada = new Scanner(System.in); // vamos solicitar o índice do número de Fibonacci System.out.print("Informe o índice: "); // lê o índice int indice = Integer.parseInt(entrada.nextLine()); // calcula o número de Fibonacci no índice informado System.out.print("O número de Fibonacci no índice informado é: " + fibonacci(indice)); System.out.println("\n"); } // método recursivo que o número de Fibonacci em um determinado índice public static int fibonacci(int indice){ if(indice == 0){ // caso base; interrompe a recursividade return 0; } else if(indice == 1){ // caso base; interrompe a recursividade return 1; } else{ // efetua uma nova chamada recursiva return fibonacci(indice - 1) + fibonacci(indice - 2); } } } |
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 |