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

C++. 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. que é o resultado da compilação. designado byte-code. para cada sistema operativo e arquitectura. Figura 1 . Mário Martins Pág. é um código standard que poderá ser em seguida executado (interpretado) por uma qualquer Java Virtual Machine (JVM).Arquitectura JSE6 Quando programamos em JAVA6 temos à nossa disposição todas estas bibliotecas predefinidas. C# e JAVA). o nosso objectivo neste contexto é conhecermos o núcleo fundamental da linguagem. que possuem disponíveis classes para quase todas as mais diferentes funcionalidades necessárias às nossas aplicações. existirá uma JVM específica que interpreta correctamente o byte-code em tal contexto Laboratórios de JAVA: Java Base © F.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). Este byte-code. e as suas construções básicas para realizarmos programação sequencial. Porém. 2 . Naturalmente que. A execução de um programa JAVA passa fundamentalmente pela compilação do seu código fonte para um código intermédio. a tecnologia JAVA é muito mais do que a linguagem de programação em que se baseia. Porém.

mas que é apenas um caso particular do primeiro. O nome do programa (classe) deverá ser igual ao do ficheiro fonte que a contém.. e por razões de estruturação do código.... Windows. todos estes métodos devem possuir o atributo static. 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. Pág. 3 © F. etc. Exemplo: a public class Teste1 deverá ser guardada no ficheiro Teste1. Java Card.. Neste facto reside a grande portabilidade e flexibilidade da linguagem JAVA. possui obrigatoriamente um método main() pelo qual se inicia a execução do código do programa. public class Teste1 { public static void main(String[] args) { // declarações e código // . 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.. invocarem-se entre si.ESTRUTURA BASE DE UM PROGRAMA JAVA Em JAVA tudo são classes. Finalmente. podendo ser public ou não (usaremos de momento sempre public)... Linux.).. } } Porém. Solaris. e por razões a ver posteriormente. Um programa JAVA é uma classe especial que. até.. entre outros.(cf.. A figura seguinte mostra este tipo um pouco mais complexo de estruturação do programa. PDA.java.. Mário Martins Laboratórios de JAVA: Java Base .

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

cf. Mário Martins Laboratórios de JAVA: Java Base . char um = '1'. id_variável [ = valor ] … ] .4E+38 a ± 1.. C.DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS. char newline = '\n'. cf. Tipo Valores false.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. etc. byte b1 = 0x49. eventualmente com atribuições dos valores de expressões para a inicialização de algumas delas. 5 © F.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.Execução Resultados 4. int dim = 20.4E-45 (7 d) ± 1. 0x como prefixo Pág.). delta = 30. A tabela seguinte mostra os tipos disponíveis.. Associadas a um tipo de dados. poderemos ter uma sequência de declarações de variáveis separadas por vírgulas. gama de valores aceites e número de bits de representação.0F 0. Pascal. lado. 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. // hexadecimal.8E+308 a ± 5E-324 (15d) boolean char byte short int long float double Tabela 1 – Tipos primitivos de Java 5. a forma geral e os exemplos seguintes: id_tipo id_variável [ = valor] [.

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful