Cursos: Análise, Ciência da Computação e Sistemas de Informação Laboratório I - Prof. Aníbal Saída formatada em Java com printf SAÍDA FORMATADA EM JAVA COM printf (Esta matéria não será exigida em avaliações) Usando o método printf em lugar de print ou println, no fluxo de saída padrão System.out, obtém-se uma saída formatada. Apresentamos um resumo dos principais recursos deste método. A sintaxe geral é printf (string de formato, lista de dados de saída) O string de formato descreve o formato para cada um dos dados da lista de dados de saída. Na lista de dados de saída os vários dados são separados por vírgula. Ex: System.out.printf("%s%d\n%10.2f", "Blablu ", 1234, 12345.678); O string de formato é todo o string que vem antes da primeira vírgula. O primeiro formato, "%s", indica que o primeiro dado a ser impresso deve ser do tipo String ("Blablu "); o segundo formato, "%d", serve para formatar um valor inteiro (1234); a seguir, vem um salto de linha, "\n", e o terceiro formato, "%10.2f", que irá exibir o terceiro dado de saída, que deve ser um número de ponto flutuante, o qual será impresso ajustado à direita dentro de um campo de 10 espaços de largura, sendo duas casas decimais (12345.678). Veja abaixo o resultado exibido: Blablu 1234 12345,68 Os formatos dos dados de saída em geral são precedidos de "%". acompanhados de exemplos e rápidos comentários. d o X x Apresentamos os principais, Formatos inteiros exibe inteiro decimal (base 10) exibe inteiro octal (base 8) exibe inteiro hexadecimal (base 16) com letras maiúsculas exibe inteiro hexadecimal (base 16) com letras minúsculas Ex: System.out.printf("%d\t%o\t%X\t%x\n", 180, 180, 180, 180); Saída: 180 264 B4 b4 • Lembrando que o "\t" serve para tabulação padrão e "\n" para o salto de linha (caracteres de escape), o valor inteiro 180 é exibido em decimal, octal e duas vezes em hexadecimal, espaçados por tabulação padrão Formato para strings s eixbe um string Ex: System.out.printf("%s%d\n", "Quadrado de 5: ", (int)Math.pow(5,2)); Saída: Quadrado de 5: 25 • f E e Aqui temos um formato string seguido de um inteiro. E salta para nova linha após imprimir. Formatos para números de ponto flutuante exibe no formato decimal exibe no formato exponencial, letra maiúscula exibe no formato exponencial, letra minúscula Laboratório I - Prof. Aníbal – Saída formatada em Java com printf 1 Ex: System.out.printf("%f\t%E\t%e\n", 12345.6, 12345.6, 12345.6); Saida: 12345,600000 1.234560E+04 1.234560e+04 • • • A vírgula (notação brasileira para separar as casas decimais) é usada no formato "f" 4 Na notação exponencial, E+04 ou e+04 significa multiplicação por 10 O padrão dos códigos "f", "e" e "E" é de seis dígitos decimais. Veremos, a seguir, como especificar quantidade diferente de casas decimais Usando largura e precisão de campos Especifica-se a largura do campo onde um dado será exibido escrevendo-se este tamanho entre o "%" e o código de formato. Ex: System.out.printf("%3d\n%3d\n%3d\n", 1, -12, 1234); Saida: 1 -12 1234 • • • Como padrão, o valor é ajustado à direita dentro do campo Se o campo é insuficiente para conter o valor, ele é expandido para a direita O sinal, quando impresso, consome uma posição do campo Ex: System.out.printf("%10.3f\n%10.3f\n", -123.45678, 54321.5); Saida: -123,457 54321,500 • "%10.3f" indica que um número de ponto flutuante será impresso, ajustado à direita, dentro de um campo de tamanho 10, tendo 3 casas decimais Ex: System.out.printf("%7.2f%15.3f\n%7.2f%15.3f\n",23.5,-120.,6743.42,5.); Saida: 23,50 -120,000 6743,42 5,000 • • + 0 , ( O uso da largura de campo é muito útil para dispor dados em colunas verticais O código de formato "f" exige que o dado seja de ponto flutuante. Os valores inteiros 120 e 5 tiveram de ser expressos com ponto decimal, caso contrário ocorreria uma exception Alguns códigos adicionais para a formatação da saída (sinal de subtração) - alinha à esquerda dentro do campo coloca sinal em todos os valores numéricos (zero) - preenche o campo com zeros à esquerda (vírgula) – usa o separador específico de localidade de milhares (ponto, na notação brasileira, vírgula, na notação dos EUA) coloca números negativos entre parênteses Ex: System.out.printf("%5d\n%+5d\n%-5d\n", 12, 12, 12); Saida: 12 +12 12 • • • O valor 12 é exibido em três linhas, dentro de um campo de 5 posições Veja o efeito do segundo código "%+5d", colocando sinal num valor positivo Repare que o valor da terceira linha ficou alinhado à esquerda dentro do campo de 5 posições, efeito do código de formatação "-" (sinal de subtração) Laboratório I - Prof. Aníbal – Saída formatada em Java com printf 2 Ex: System.out.printf Saida: 00012 12 (12) • • ("%05d\n%(5d\n%(5d\n", 12, 12, -12); Este exemplo mostra o efeito do código "0" (zero) na primeira linha e do código "(" nas duas linhas seguintes A exibição de número negativo entre parênteses é uma notação usada em Contabilidade Ex: System.out.printf("%,d\t%s%,.2f\n", 12345, "R$ ", 12345.678); Saida: 12.345 R$ 12.345,68 • • • O código ","(vírgula) permite utilizar o ponto para a separação das casas de milhares, que é a notação usada no Brasil (repare que o primeiro valor é doze mil, trezentos e quarenta e cinco, um inteiro) O segundo valor é doze mil, trezentos e quarenta e cinco Reais e sessenta e oito centavos Outra maneira de exibir o mesmo resultado é System.out.printf("%,d\tR$ %,.2f\n", 12345, 12345.678); Ex: System.out.printf("%,15.2f\n%,15.2f\n", 123456789.1, -123456.); Saida: 123.456.789,10 -123.456,00 • Este exemplo combina alguns recursos para exibir valores numa coluna de 15 espaços de largura, usando a notação brasileira Alguns exemplos de erros Ex: System.out.printf("%f%d", 12, 34); Saída: IllegalFormatConversionException • Tentativa de exibir um dado de saída de tipo diferente do especificado pelo código de formato. Ex: System.out.printf("%d%d%d", 12, 34); Saída: MissingFormatArgumentException • Apenas 2 dados na lista de saída para 3 formatos Outros formatos Existem diversos outros códigos e recursos de formatação vinculados ao método printf que fogem aos objetivos deste resumo. Podem ser estudados na fonte abaixo citada ou na API Java. Fonte bibliográfica Deitel, H. M.; Deitel, P.J. Java: como programar. São Paulo, Pearson, 2007. Laboratório I - Prof. Aníbal – Saída formatada em Java com printf 3