FICHA PRÁTICA 1

LABORATÓRIO BASE DE JAVA6

TIPOS PRIMITIVOS & ESTRUTURAS DE CONTROLO

PROF. F. MÁRIO MARTINS D I /U M

VERSÃO 2.0 20 10

© F. Mário Martins

Laboratórios de JAVA: Java Base

que é o resultado da compilação. mas seguindo princípios rigorosos da Engenharia de Software que são mais facilmente respeitados se utilizarmos correctamente características e propriedades disponíveis no paradigma da Programação por Objectos e suas linguagens (cf. Mário Martins Pág. Este byte-code.2009-2010 FICHA PRÁTICA 1 LABORATÓRIO BASE DE JAVA SÍNTESE TEÓRICA JAVA é uma linguagem de programação por objectos. A figura seguinte mostra a arquitectura de software correspondente ao ambiente JSE6 que é necessário instalar nas nossas máquinas para executarmos e criarmos programas escritos em JAVA (na sua versão mais actual JAVA6). Naturalmente que.Arquitectura JSE6 Quando programamos em JAVA6 temos à nossa disposição todas estas bibliotecas predefinidas. designado byte-code. o nosso objectivo neste contexto é conhecermos o núcleo fundamental da linguagem. Porém. que possuem disponíveis classes para quase todas as mais diferentes funcionalidades necessárias às nossas aplicações. a tecnologia JAVA é muito mais do que a linguagem de programação em que se baseia. e as suas construções básicas para realizarmos programação sequencial. Figura 1 . para cada sistema operativo e arquitectura. 2 . Porém. A execução de um programa JAVA passa fundamentalmente pela compilação do seu código fonte para um código intermédio. C++. existirá uma JVM específica que interpreta correctamente o byte-code em tal contexto Laboratórios de JAVA: Java Base © F. é um código standard que poderá ser em seguida executado (interpretado) por uma qualquer Java Virtual Machine (JVM). C# e JAVA).

e por razões de estruturação do código.java.. Pág.. Java Card. e por razões a ver posteriormente. podendo ser public ou não (usaremos de momento sempre public). } } Porém. mas que é apenas um caso particular do primeiro. Finalmente..(cf... Linux. Solaris. public class Teste1 { public static void main(String[] args) { // declarações e código // . possui obrigatoriamente um método main() pelo qual se inicia a execução do código do programa.. Neste facto reside a grande portabilidade e flexibilidade da linguagem JAVA.. Mário Martins Laboratórios de JAVA: Java Base . Exemplo: a public class Teste1 deverá ser guardada no ficheiro Teste1. nada impede que se criem métodos externos ao método main() que pertencem igualmente ao programa e que podem ser invocados a partir do método main() e. O nome do programa (classe) deverá ser igual ao do ficheiro fonte que a contém. invocarem-se entre si.. até. Um programa JAVA é uma classe especial que. A figura seguinte mostra este tipo um pouco mais complexo de estruturação do programa.ESTRUTURA BASE DE UM PROGRAMA JAVA Em JAVA tudo são classes. PDA. 3 © F. Java byte-code (1010100010010001) Biblioteca de Classes Java Class Loader S D K JVM Interpretador de Java Compilador Just-in-Time Sistema de Runtime de Java Sistema Operativo Hardware SINTAXE ESSENCIAL 1... Windows. entre outros.). etc. todos estes métodos devem possuir o atributo static...

.. COMPILAÇÃO E EXECUÇÃO USANDO BLUEJ . ... clicar no botão direito do rato e executar a opção Compile . Mário Martins Pág.Criar o ficheiro fonte usando a opção New Class (ou editar ficheiro existente)...EDIÇÃO. . ..2009-2010 public class Teste2 { public static <tipoRes> metodo_Aux1 (argumentos opcionais) { // ….. .. aparece o mesmo ícone mas sem qualquer tracejado.. // declarações e código // . } public static <tipoRes> metodo_Aux2 (argumentos opcionais) { // …. } } 2. . } public static void main(String[] args) { // .Pode no entanto usar-se a opção Compile imediatamente após o fim da edição. 4 .Para ficheiros não compilados... sobre o ícone clicar no botão direito do rato e seleccionar o método main() ......class 3...Os resultados são apresentados na Terminal Window do BlueJ EXEMPLO: Edição Laboratórios de JAVA: Java Base © F.java Compilação: > javac Teste1..Se não existirem erros. que se apresentará a tracejado indicando que não se encontra compilado ainda.Invocar o BlueJ (eventualmente usar opção New Project …)..Se fizermos apenas Save é criado um ícone sombreado com o nome do ficheiro criado..Para executar o programa..java Execução: > java Teste1 cria ficheiro Teste1...COMPILAÇÃO E EXECUÇÃO A PARTIR DE LINHA DE COMANDOS Ficheiro fonte: Teste1..

int dim = 20. etc. cf.0 Bits 1 16 8 16 32 64 32 64 Gama de valores false a true \u0000 a \uFFFF -128 a +127 -32768 a +32767 -2147483648 a 2147483647 ≈ -1E+20 a 1E+20 ± 3. C. eventualmente com atribuições dos valores de expressões para a inicialização de algumas delas. A tabela seguinte mostra os tipos disponíveis. cf. id_variável [ = valor ] … ] .4E+38 a ± 1.DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS.4E-45 (7 d) ± 1. 5 © F. Pascal. lado. byte b1 = 0x49. a forma geral e os exemplos seguintes: id_tipo id_variável [ = valor] [. poderemos ter uma sequência de declarações de variáveis separadas por vírgulas. // hexadecimal..TIPOS PRIMITIVOS E OPERADORES Os tipos primitivos de JAVA são os usuais tipos simples que se associam a variáveis nas quais pretendemos guardar valores (cf. Mário Martins Laboratórios de JAVA: Java Base . char newline = '\n'. gama de valores aceites e número de bits de representação. Associadas a um tipo de dados.8E+308 a ± 5E-324 (15d) boolean char byte short int long float double Tabela 1 – Tipos primitivos de Java 5.Execução Resultados 4..). 0x como prefixo Pág. char um = '1'. true caracter unicode inteiro c/ sinal inteiro c/ sinal inteiro c/ sinal inteiro c/ sinal IEEE 754 FP IEEE 754 FP Omissão false \u0000 0 0 0 0L 0. Tipo Valores false.0F 0. delta = 30.

Precedência   12  11 9  8    4 3 1      Operador Tipos dos Operandos número boleano número. qualquer Associação D D E E E E E E E E E E E D D D D D D Operação sinal. +.. atribuição após oper. As constantes JAVA são também. qualquer variável. num dado contexto. final double PI = 3. / /. Vejamos os mais importantes na tabela seguinte. unário negação multipl. cujos valores não poderão ser alterados por nenhuma instrução. // parte inteira igual a 0 int altura = dim + delta.000000123. Mário Martins Pág.DECLARAÇÃO DE CONSTANTES. <= >. atribuição após oper. etc.2009-2010 long diametro = 34999L. // inicialização usando cálculo de expressão Associados a estes tipos simples existe um conjunto de operadores necessários à sua utilização. em certos casos usando-se também o símbolo _. O atributo final garante que um erro de compilação será gerado caso haja a tentativa de modificar tal valor. atribuição após oper. qualquer variável. As seguintes declarações. qualquer variável. número inteiro. // este é um comentário monolinha. por razões de estilo e de legibilidade.7E+5. definem.COMENTÁRIOS. int e módulo soma e subtracção comparação comparação igual valor valor diferente OUEXC lógico OU lógico E condicional OU condicional atribuição atribuição após oper. constantes identificadas. 6 . atribuição após oper. <. identificadas usando apenas letras maiúsculas. inteiro número.314E+7. final double R_CLAP = 8.. double j = . só termina quando aparecer o delimitador final */ /** este é um comentário de documentação para a ferramenta javadoc */ Laboratórios de JAVA: Java Base © F. double raio = -1.% +. qualquer variável. >= == != ^ | && || = *= += <<= >>>= ^= /= -= >>= &= |= %= variável. termina no fim desta linha /* este é multilinha. qualquer Tabela 2 – Operadores de JAVA para tipos simples 6. 7.14159273269. divisão quoc. ! *. comparação. número números aritméticos primitivos primitivos boleanos boleanos boleano boleano variável.

baseada em especial no . Importação selectiva de classes: import java.out. são mensagens básicas todas as strings (cf. instrução2. ou { instruções } for (Tipo variável : array de elementos de tipo Tipo) instrução.8. } while(condição de repetição).lang. System.util. e que pode incluir texto livre.out. condição de saída. 9. 10.Math. 10..OUTPUT BÁSICO E FORMATADO 10.lang.] default: instruções. ou { instruções } { instrução1.lang. Se nos programas em que tivermos que realizar muitas operações de saída escrevermos no seu início a cláusula de importação import static java.System. então.2 10. que é o primeiro parâmetro.Math. que serão formatados segundo as directivas dadas na string de formatação.abs.*. … } else { instrução1.println("Linguagem : " + lp + 5). que a partir do programa é visto como um “ficheiro” de caracteres do sistema designado por System. constantes ou expressões)..out. ou { instruções } while (condição de execução) { instruções } do { instruções..IMPORTAÇÃO NORMAL E ESTÁTICA – REUTILIZAÇÃO DE CLASSES Importação por omissão: import java.println(nome + “tem “ + idade + “ anos. Mário Martins Laboratórios de JAVA: Java Base .1.println("Bom dia e …\tbom trabalho!\n\n\n"). …} switch (expressão_simples) { case valor_1 : instruções.lang. { instrução1.).println(. } for (inicialização. Importação estática (elimina prefixos): import static java. System. em: out.2 método printf().ESTRUTURAS DE CONTROLO if if if if (condição) (condição) (condição) (condição) instrução.*.println(. [break. lista_valores) permitirá a saída de uma lista de valores (sejam variáveis. eu queria um " + carro + "!").JAVA possui também uma forma formatada de escrita de dados.) bastará escrever-se out.out.] … case valor_n : instruções.println(nome + ".As instruções básicas de escrita (output) de JAVA são dirigidas ao dispositivo básico de saída. incremento) instrução. instrução2. “abc” mais operador de concatenação + para strings e valores de tipos simples) enviadas para tal ficheiro usando a instrução println(). A forma geral de formatação de valores de tipos primitivos é a seguinte (para cada valor a formatar): Pág. instrução2.2..”). cf. out.println(“Hello Java!”). 7 © F. Importação global de um package: import java.out. o que se escreve: System. [break. … } instrução1. o monitor. O método printf(formatString. Assim.out. em vez de se escrever System.. else instrução2.

float round(double val). float f1 = 123.in. d3). obrigar a incluir sempre o sinal (+). Um valor de dado tipo se formatado para outro tipo compatível é automaticamente convertido.. Mário Martins Pág. x).. // resultado no intervalo [0. usando apenas caracteres de conversão podemos automaticamente fazer a conversão de um número inteiro na base 10 para a base 8 e para a base 16.x).CLASSES PREDEFINIDAS IMPORTANTES java. tipo_numérico val2). f (real. int x = input.Scanner possui métodos para realizar leituras de diversos tipos a partir de diversos ficheiros.7f Exp1 %2$8. // seno e coseno double sin(double val). vírgula flutuante)..util.x.printf("R1 %5. d2.4e%n". double d2 = 234.Tendo o scanner input associado ao teclado.in).nextTipoSimples(). h (hexadecimal). double d3 = 12. // // // // // // lê uma string lê uma linha de texto terminada por \n lê um inteiro válido lê um real válido. b (boleano). Por exemplo. d (inteiro).45f. sendo: c (carácter). 3. s (string). 2.PI.Math Math.2009-2010 %[índice_arg$] [flags] [dimensão][.INPUT COM CLASSE SCANNER A classe java.f1. teremos que associar um Scanner ao teclado para se poder ler os valores primitivos necessários aos programas.printf("Inteiro %d = Octal %1$o = Hexa %1$h%n".close().printf("Inteiro %d = Octal %o = Hexa %h%n". As flags podem permitir alinhar os resultados à esquerda (-). out. String linha = input.Scanner.util.Criar um Scanner que se vai associar ao teclado.678. double cos(double val). x. // potenciação double random(). associado a uma variável designada System. O teclado está. double exp). e não só. o separador lê um valor de qualquer tipo simples fecha o scanner Nota: Posteriormente usaremos uma classe Input especialmente desenvolvida 12. 11. usar métodos de Scanner para ler os valores. out.Escrever no início do ficheiro a cláusula de importação import java. e (real. double pi = input.0 1.. cf.lang. tipo_numérico min (tipo_numérico val1. colocar zeros no início (0).. vírgula fixa). colocar espaços no início (‘ ‘) ou colocar parêntesis (() se o número for negativo.nextInt(). e que vamos designar por input: Scanner input = new Scanner(System.0[ tipo_numérico max (tipo_numérico val1. por omissão. Assim.2f R2 %3$-12.E: // valores de PI e da base E com grande precisão tipo_numérico abs(tipo_numérico val). sendo . Interessa-nos aqui ver como podemos usar esta classe para realizar leituras de valores de tipos simples a partir do teclado. out.nextLine().: String nome = input. int x = 1261. Math. o (octal). tipo_numérico val2).nextDouble().decimais] conversão Os caracteres de conversão são os que indicam o tipo de valor resultado da conversão do parâmetro. int round(float val). t (data) e n (newline independente da plataforma).45E-10. Laboratórios de JAVA: Java Base © F. input. 8 . // valor absoluto double sqrt(double val).next(). Vejamos os passos: 1. input. // raiz quadrada double pow(double base.

util. i <= 10.lang. int fim). Calendar.MIN_VALUE.Scanner.String Constantes: “” “abcd” “Uma linha\n” “Exemplo\t\tFinal\n\n” Concatenação: “abc” + “25” “Luís “ + “Carlos” “Linha1\n” + “Linha2\n” String valueOf(tipo_simples val).out.nextInt().").print("Idade: ").nextInt().println(nome + " tem " + idade + " anos.lang.util.getTimeInMillis().MARCH. // modifica o campo ANO int mês = hoje. 15).next().Float … <classe>. // converte para string um valor simples char charAt(int índex). nome = input.get(GregorianCalendar.MIN_VALUE // máximo e mínimo definidos java. int maior = Integer.println("Maior inteiro = " + maior). i++) { 7 System. 1 2 3 4 5 6 7 8 9 10 11 import java.lang. Mário Martins Laboratórios de JAVA: Java Base . valor = input.printf(“%tT%n”.YEAR.in).print("Nome: "). public class Leitura1 { public static void main(String[] args) { String nome.getTimeInMillis().out. } } Ex2: Ler 10 inteiros e determinar o maior inteiro introduzido.out. int dias = dif_milis/(24*60*60*1000).out.print("Inteiro " + i + " : "). <classe>. // consulta o campo MÊS // tempo decorrido desde o início da ERA até à data e hora actuais em ms long milis = agora. 23. 2009).java. System.MAX_VALUE.printf(“%1$tY/%1$tm/%1$td%n”. // escrever a hora actual e escrever a data actual out. agora) // 12:23:35 out. 9 if (valor > maior) maior = valor.Double java.lang.Integer java. 10. // lê via teclado 5 int valor. 9 © F.getTimeInMillis() .out. // idem GregorianCalendar hoje = new GregorianCalendar(2007.inicio. 10 } 11 System.MONTH). System.Scanner. // devolve o carácter na posição índex da string int length(). // 2005/03/21 java. // devolve uma substring boolean equals(String str) // igualdade de strings EXERCÍCIOS RESOLVIDOS: Ex1: Ler um nome e uma idade e imprimir um texto com os resultados. 6 for(int i = 1.in). // define data hoje. //devolve o comprimento da string String substring(int inic. idade = input. agora). int idade. // Scanner: classe para leitura Scanner input = new Scanner(System.set(GregorianCalendar. 12 } 13 } Pág. 2 public class MaxInt { 3 public static void main(String[] args) { 4 Scanner input = new Scanner(System. 1 import java. // lê via teclado System.GregorianCalendar // classe útil para tratamento de datas GregorianCalendar agora = new GregorianCalendar(). // diferença entre duas datas (agora e inicio) em número de dias long dif_milis = agora.util.

println("A diferença entre eles é : " + diferenca).lang. parseFloat().MIN_VALUE. bem como o maior e o menor. exp. int exp.printf("Valor %7.Scanner. import java. int menor = Integer.System. else return n*factorial(n-1). i <= total.nextDouble().println("Maior = " + maior + " Menor = " + menor + "\n"). out. // lê via teclado valor = input. int diferenca. import static java. double valor. dado como argumento do método main() através dos argumentos deste método.in).2f elevado a %2d = %8. Imprimir esse valor.pow(valor. } } Ex5: Escrever um programa que calcule o factorial de um valor inteiro. int maior = Integer.print("Introduza valor real: ").Scanner. if (valor < menor) menor = valor.nextInt(). valor = input. total = input. public class FactorialInt{ public static long factorial(long n) { if (n==1) return 1. Mário Martins Pág.MAX_VALUE.print("Total de valores a ler: "). Math. ler N reais e dar os resultados das suas potências de expoente Exp.4f%n".util. 10 . valor. // lê via teclado int total. i++) { out.parseInt(args[0]). } public static void main(String[] args) { long i = Integer. public class DiferencaInt { public static void main(String[] args) { int valor. também introduzido pelo utilizador. } } } Ex4: Ler uma sequência de inteiros positivos (terminada pelo valor -1) e determinar a diferença entre o maior e o menor inteiro lidos.print("Expoente a que os quer elevar: ").println( i + "! = " + factorial(i) ).lang. Laboratórios de JAVA: Java Base © F. while(valor != -1) { if (valor > maior) maior = valor. } } Execução: > FactorialInt 4 (em Bluej em args introduzir {“4”}) Nota: Para outro tipo teríamos parseDouble().out.nextInt(). out. out. Scanner input = new Scanner(System. etc.System.nextInt(). parseByte(). out. for(int i = 1.in).2009-2010 Ex3: Sendo N dado pelo utilizador. import java.out. exp)). import static java.lang.System. public class Expoentes { public static void main(String[] args) { Scanner input = new Scanner(System. out. out. exp = input.util. import static java.out. } diferenca = maior – menor.

System. import static java. fim. inicio.out.lang.HOUR. 12.Scanner.inicio.println("O ciclo demorou " + milisegs + " milisegundos a executar. } public static void main(String[] args) { GregorianCalendar inicio = new GregorianCalendar().set(GregorianCalendar. // ou new GregorianCalendar(2007.set(GregorianCalendar.GregorianCalendar. out. out.getTimeInMillis() ."). public class Ex6 { public static void main(String[] args) { int x = 0. // ou new GregorianCalendar(2007. horas. int totalhoras = totalmin/60.DAY_OF_MONTH. minutos e segundos.MARCH. 111). inicio.inicio. String difTempo = difDatas(fim.getInstance().YEAR. 444). inicio).SECOND. fim. 15). fim. } } Ex7: Escrever um programa que use um método auxiliar que aceite duas datas e determine a sua diferença em dias. O resultado do método deverá ser uma string. long seg = totalseg%60.set(GregorianCalendar. Calendar fim = Calendar.SECOND. determine a hora após tal ciclo.set(GregorianCalendar.set(GregorianCalendar. import java. 20). import java. GregorianCalendar inicio) { long totalmilis = fim. 2007). 2). Calendar inicio = Calendar. 11 © F.getTimeInMillis() .Scanner. long milis = totalmilis%1000. 13).DAY_OF_MONTH.out. "+ min+ " minutos e " + seg + ". public class Ex7 { public static String difDatas(GregorianCalendar fim. 23. GregorianCalendar fim = new GregorianCalendar().YEAR. i++) x = x +1.set(GregorianCalendar. e calcule o total de milissegundos que tal ciclo demorou a executar. import static java. long totalseg = totalmilis/1000.getTimeInMillis().set(GregorianCalendar.MILLISECOND. out.MONTH. import java. inicio. 8.set(GregorianCalendar.set(GregorianCalendar. 12).set(GregorianCalendar. 15).println("Diferença: " + difTempo). 2).lang.set(GregorianCalendar. Calendar. fim.getInstance(). int totaldias = totalhoras/24.MINUTE. int horas = totalhoras%60. realize um ciclo com 10 milhões de incrementos unitários de uma dada variável. inicio.set(GregorianCalendar.set(GregorianCalendar. fim. 33). 8).set(GregorianCalendar." + milis + " segundos.MARCH.MONTH. Mário Martins Laboratórios de JAVA: Java Base . fim. return totaldias + " dias.util. int totalmin = (int) totalseg/60. fim. 22). Calendar. 2009).util.Calendar.MINUTE. int min = totalmin%60.System. long milisegs = fim.". " + horas +" horas.HOUR. 12). } } Pág. inicio.MILLISECOND. i < 10000000. 10.util.getTimeInMillis(). inicio. inicio.Ex6: Escrever um programa que determine a data e hora do sistema. import java. 15).util.println("A variável x tem o valor: " + x). for(int i = 0.

total.lerInt(). int dia = 0. …) em que se registou a maior variação em valor absoluto relativamente ao dia anterior e qual o valor efectivo (positivo ou negativo) dessa variação.lerDouble(). temp = Input. A maior variação de temperatura registou-se entre os dias __ e __ e foi de ___ graus. soma += nota. ((double) soma)/total). import java. maiorDif = difAbs. total. A temperatura entre o dia __ e o dia __ subiu/desceu ___ graus. Scanner input = new Scanner(System. nota = Input. int total. public class Ex8 { public static void main(String[] args) { double nota.printf("A média das %2d notas é %4. } } // resultados out. difReal = temp . 12 .0."). i <= total. out.System. Os resultados devem ser apresentados sob a forma: A média das N temperaturas foi de ____ graus.lang. out.println("Nota N. // lê via teclado out. " + i). int anterior.lerInt().Scanner. soma = temp. int maiorDif = 0. if (difAbs > maiorDif) { dia = i. soma = 0. int difReal = 0. i++) { out. i <= total. String txt = difReal > 0 ? "subiu " : "desceu ".2f%n". } } Laboratórios de JAVA: Java Base © F. } } Ex9: Escrever um programa aceite N temperaturas inteiras (pelo menos duas) e determine a média das temperaturas. public class Temperaturas { public static void main(String[] args) { int temp. soma += temp. total = Input. for(int i = 1.lerInt(). total = Input. out.lang.println("Maior variação de temperaturas entre os dias " + (dia-1) + " e " + dia).in). difAbs = 0.printf("A média das %2d temperaturas é %4.Math.print("Total de notas a ler: ").out.print("Temperatura " + i + " : ").2009-2010 Ex8: Escrever um programa aceite N classificações (números reais) entre 0 e 20 e determine a sua média (usar printf() para os resultados).3. int total. soma/total). import static java.println("A temperatura entre esses dias " + txt + difAbs + " graus. temp = Input.2f%n". for(int i = 2.System. o dia (2. import static java. difAbs = abs(temp .lang.anterior.lerInt().anterior). } out.util. import static java. Mário Martins Pág.print("Temperatura " + 1 + " : "). i++) { anterior = temp. out.out. int soma = 0. out.print("Total de temperaturas a ler: ").abs.

printf("Soma dos %2d números reais = %8. out.printf("Raio = %7.Math. public class Ex11 { public static void main(String[] args) { double soma = 0. double num.Remover 3. raio = Input.lerDouble().. conta. } } } Ex11: Escrever um programa que faça a leitura de uma sequência não vazia de números reais terminada por 0. a opção escolhida (Inserir. i <= limite. public class Impares { public static void main(String[] args) { int limite. soma.println("Números ímpares menores ou iguais a " + limite). O programa deverá repetir a apresentação do menu até que o utilizador seleccione a opção 5.4f .Sair Em seguida.println(i).System.print("Número Real: ")..out. 2*PI*raio).PI. Mário Martins Laboratórios de JAVA: Java Base . int conta = 0.Inserir 2. Usar printf() para os resultados. num = Input. } out. o programa deverá ler um int. public class AreaCirculo { public static void main(String[] args) { double raio. } } Ex12: Escrever um programa leia um inteiro N e imprima todos os números ímpares inferiores a N.Sair. import static java. Remover.lang.lang. limite = Input.lang. import static java. PI*raio*raio. while(raio != 0.lerDouble()..0 import static java.0 e calcule o seu somatório (∑) e o seu produtório (∏) com precisão de 4 casas decimais no resultado.print("Número Real: "). double prod = 1..lerDouble(). etc.lang. Pág. raio = Input.out.5f%n".) ou a mensagem “Opção Inválida!”.4f%n%n". out. out. e deverá apresentar ao utilizador. import static java. num = Input.print("Valor do raio: "). prod *= num. out. } } Ex13: Escrever um programa que apresente ao utilizador um menu vertical com as opções: 1.print("Ler número limite: ").5f e Perímetro = %9. raio.lerInt().0) { out. for(int i = 1.print("Valor do raio: "). 13 © F.Consultar 4.. prod). out. O programa apenas deverá terminar com a leitura de um raio = 0. textualmente. que apenas será válido se entre 1 e 5.. while(num != 0.out. Produto = %12.System.Ex10: Escrever um programa que leia sucessivas vezes o raio (real) de um círculo e calcule a área e o perímetro respectivos com grande precisão (5 decimais).3f => Área = %9.Gravar 5. i = i + 2) out. conta++.lerDouble().System. out.0) { soma += num.

SAIR "). REMOVER "). } public static void texto_opcao(int op) { switch(op) { case 1 : out. O programa dará 5 tentativas ao utilizador para acertar no número gerado.println(" 4. Quer perca quer acerte.println(" 1.println("REMOVER").println("--------------------------------------------"). out. return numAleat.println(" 5.lang. escolha = opcao().println("OPCAO INVÁLIDA !!"). case 3 : out. Se sim. import static java. case 2 : out. case 5 : out. novo número será gerado e o jogo retomado.lang. out. out. opcao = Input. break.println("CONSULTAR"). 14 . valida = (opcao >= 1) && (opcao <= 5).println(" 3.2009-2010 import static java. do { menu().Math. public class Ex13 { public static void menu() { out. Mário Martins Pág.println("SAIR").random. À terceira tentativa falhada o utilizador perde.out.println("GRAVAR"). if(!valida) out. public class Ex14 { public static int geraNumero() { int numAleat = 1 + (int) (random() * 100). out. A cada tentativa do utilizador.println("--------------------------------------------").println(" 2. out. } public static int opcao() { int opcao. break. } while(escolha != 5). case 4 : out. INSERIR "). o programa indicará se o número gerado é maior ou menor que o número dado pelo utilizador. break. o programa deve perguntar ao utilizador se quer continuar a jogar ou não. import static java.println("-OPCOES DISPONÍVEIS ---"). } Laboratórios de JAVA: Java Base © F.out.println("--------------------------------------------").lang.println("INSERIR"). texto_opcao(escolha). do { out. boolean valida = false.System. GRAVAR ").println("FIM DE PROGRAMA !!").print("OPCAO: "). } } public static void main(String[] args) { int escolha. out. return opcao. break. out. out. } while(!valida). out.lerInt(). CONSULTAR ").System. break. } } Ex14: Escrever um programa que gere um número aleatório entre 1 e 100.

else { if (palpite > numero) out.print("Dia de nascimento: "). } while(mes <= 0 || mes > 12).GregorianCalendar. int resposta. o dia de hoje e a idade que foi calculada. out. tentativa++. dia.lang. String resp = "". do { out.. palpite = Input. dataNascimento). int opcao.println("Continuar Jogo (1) ou Sair(outro): "). import java. acertou = false. } } // verifica se acertou ou não if (acertou) out.printf("NAscido a %1$td/%1$tm/%1$tY%n". out. indicando ao utilizador a data de nascimento lida. int palpite.println("PARABÉNS ACERTOU !!"). ano = Input.lerInt(). tentativa = 1.System.out. boolean acertou.print("Ano de nascimento: "). do { out.print("Tentativa " + tentativa + " . } while(dia <= 0 || dia > 31).print("Tentativa " + tentativa + " . } } Ex15: Escrever um programa que leia o ano. mes = Input.lerInt().. out. do { out.util. palpite = Input.Qual o numero gerado? "). while( tentativa < 5 && !acertou) { if(palpite == numero) acertou = true..Qual o numero gerado? "). import static java.lerInt(). Mário Martins Laboratórios de JAVA: Java Base . dia = Input. out. do { numero = geraNumero().lerInt(). mês e dia de nascimento de uma pessoa e calcule a sua idade actual.").println("FALHOU ! O número era o " + numero). int tentativa.println("FIM DO JOGO . else out. resposta = Input. dia).. } while(resposta == 1).println("PARA CIMA !!").print("Mês de nascimento: ").public static void main(String[] args) { int numero. mes.. 15 © F. out. public class Ex15 { public static void main(String[] args) { int ano.println("PARA BAIXO !!"). // Nota: Janeiro = 0 para um Calendar !! GregorianCalendar dataNascimento = new GregorianCalendar(ano. GregorianCalendar hoje = new GregorianCalendar()...lerInt().lerInt(). mes-1. else out. Pág.

out.print("Mês (Janeiro = 0) : ").println("IDADE NÃO CORRIGIDA: " + anos + " anos. anos). out.out. out.add(GregorianCalendar. hoje)..2009-2010 // diferença de anos int anos = hoje. anos--.println("Ainda lá não chegamos !!"). public class Ex16 { public static GregorianCalendar lerData() { int ano. } while(dia <= 0 || dia > 31). return new GregorianCalendar(ano.YEAR. GregorianCalendar diaDeAnosEsteAno = dataNascimento.println("------------------------------------------"). /** * Cálculo da Diferença em Anos entre duas Datas * * @author FMM * @version 1. import static java. out. } while(resp.equals("s")).lerInt().before(diaDeAnosEsteAno)) out.println("---.equals("S") || resp.println().lerString(). out.. Mário Martins Pág.printf("DATA ACTUAL : %1$td-%1$tm-%1$tY%n".lerInt(). ").").print("Ano a considerar: "). diaDeAnosEsteAno).get(GregorianCalendar. } Laboratórios de JAVA: Java Base © F. } while(ano <= 0).lerInt(). dia.println("A pessoa tem " + anos + " anos !"). dia). mes = Input.printf("ANOS A %1$td-%1$tm-%1$tY%n".print("Dia: "). ano = Input.lang. resp = Input.System.YEAR). mes. // dia de anos este ano = data de nascimento + idade não corrigida diaDeAnosEsteAno.0/2009 */ import java.print("Quer calcular mais (S/*) ? ").GregorianCalendar. mes. dia = Input. do { out. } } Ex16: Escrever um programa que leia duas datas (ano. // já fez anos ou não ?? if (hoje. out. out..YEAR) dataNascimento.get(GregorianCalendar. mês e dia) e determine o número de anos entre tais datas.FIM DO CALCULADOR DE IDADES . do { out. } while(mes <= 0 || mes > 12).util. out. 16 . do { out.

MONTH)) anos--. int anos = 0. Mário Martins Laboratórios de JAVA: Java Base . data2).before(data2)) ? totalAnos(data2. if(data1. data2).printf("DATA1 %1$td/%1$tm/%1$tY%n".MONTH)) anos--.println("Diferem de " + (int) anos1 + " anos!").before(data2)) anos = data2.data2.println("DATAS EM COMPARAÇÃO : "). // ou ainda long anos1 = (data1.get(GregorianCalendar.getTimeInMillis() . data1) : totalAnos(data1. if(data2. out.get(GregorianCalendar.YEAR). int totalDias = totalMin/(60*24). int anos = totalDias/(30*12). return anos.data1. if(data2. GregorianCalendar data2) { long dif = data1. out.getTimeInMillis().get(GregorianCalendar. data2.MONTH) < data1.MONTH)< data1. out.get(GregorianCalendar. } public static void main(String[] args) { out. // de milisegundos para anos long totalSeg = dif/1000.YEAR) . out. data2 = lerData().public static int totalAnos(GregorianCalendar data1.get(GregorianCalendar.get(GregorianCalendar. data1). GregorianCalendar data1.println("Diferem de " + anos + " anos!"). } } Pág.printf("DATA1 %1$td/%1$tm/%1$tY%n". 17 © F. data1 = lerData(). int totalMin = (int) totalSeg/60.