• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nazgulled

Duas pequenas dúvidas sobre printf e delcaração de arrays

7 mensagens neste tópico

Ando a iniciar-me em Java devido à universidade e deparei-me com duas pequenas dúvidas enquanto estava aqui a resolver uns exercícios básicos...

1) Num documento disponibilizado no site as declarações de arrays são apresentadas assim:

int lista[]; // estilo C

int[] lista; // estilo JAVA

Ora, ambos os métodos funcionam em Java, eu pelo menos testei localmente e ambos funcionavam. A minha pergunta é: Há algum problema em usar o estilo C? Ou o estilo Java é mais por convenção para que facilmente todo o código siga uma certa estrutura?

Eu pergunto isto porque por exemplo, usando o estilo C, poderia fazer algo tipo:

int var1, var2, lista[];

Onde só a variável lista é um array, as outras duas são inteiros. No entanto, se usar o estilo Java tenho de fazer assim:

int var1, var2;

int[] lista;

2) Tenho um objecto 'today' do tipo Calendar com uma data predefinida e tenho um printf do genero:

System.out.printf("Data de hoje: %1$td/%1$tm/%1tY.", today);

O que raio significa aquela formatação? Já li vários documentos sobre isto, mas ainda não percebi totalmente. Principalmente a parta do %1$, que é isto? O que eu sei é que %td, %tm e %tY representa o dia(com 0 inicial para números inferiores a 10), mês(com 0 inicial para números inferiores a 10) e ano(com 4 dígitos) respectivamente. Mas aquele %1$ parte-me todo e não faço ideia do que significa.

3) E já agora um terceira pergunta de certa forma relacionada com a anterior. No printf() usar %n ou \n, vai dar ao mesmo não vai? Ou o %n tem algum significado especial?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - Pá eu aconselho a usar as convenções do Java embora deva dizer que no que toca a arrays normalmente declaro como calha lol, mas também não tenho habito de fazer int v1, v2, v3... normalmente declaro tudo 1 a 1, mas isso é uma questão de organização minha.

2 - Nunca tinha visto algo assim lol, normalmente faço um medo que retorna a data sob forma de String com a formatação que quero.

3 - Penso que dá no mesmo alias usa-se mais o %n deve ser outra das convenções Java. Mas também não sou um expert em printf, sou mais do println ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Relativamente à primeira questão, eu prefiro usar int[] a. Isto porque aquilo que define o tipo fica tudo junto, e totalmente separado do nome da variável (por esta mesma razão, também escrevo em C, int* x em vez de int *x).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ta bem então... Obrigado.

Só falta agora a segunda pergunta...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O 1$ acho que é para usares sempre o primeiro argumento (repara que queres imprimir 3 valores, mas só forneceste 1). Ou mais genericamente, n$ permite-te usar a n-ésima variável que tens no printf.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acerca do printf:

Uma instrução printf(stringf, lista_valores) permitirá a saída de uma lista de valores (sob a forma de variáveis, constantes ou expressões), que serão formatados segundo as directivas dadas na string de formatação que é o primeiro parâmetro.

Esta string é bastante complexa, pois em JAVA tem que especificar as conversões, quer para tipos primitivos

quer para objectos. A forma geral de formatação de valores de tipos primitivos é a seguinte:

%[índice_arg$] [flags] [dimensão][.decimais] conversão

Começando pelo fim, os caracteres de conversão são os que indicam o tipo de valor resultado da conversão do parâmetro, sendo: c (carácter), b (boleano), o (octal), h (hexadecimal), d (inteiro), f (real, vírgula fixa), s (string), e (real, vírgula flutuante) e n (newline independente da plataforma).

Por exemplo, 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.

int x = 1261;

out.printf("Inteiro %d = Octal %o = Hexa %h%n", x,x,x);

Note-se desde já a possibilidade de inserirmos caracteres na forma ‘\n’ na string que define os formatos.

Note-se também, através deste exemplo, o interesse de podermos, em dadas circunstâncias, indicar qual o argumento a que nos estamos a referir na string de formatação (cf. [índice_arg$]). No exemplo acima tivemos que repetir a variável x três vezes para preencher os três conversores, mas basta dizer que cada um deles deve usar o primeiro e único parâmetro, como por exemplo:

out.printf("Inteiro %d = Octal %1$o = Hexa %1$h%n", x);

e, num caso mais geral, a ordem dos parâmetros poderá ser completamente reformulada na string de formatação, tal como no exemplo seguinte já com os elementos definidores das dimensões e de casas decimais.

float f1 = 123.45f;

double d2 = 234.678; double d3 = 12.45E-10;

out.printf("R1 %5.2f R2 %3$-17.16f Exp1 %2$8.4e%n",f1, d2, d3);

Finalmente, as flags podem permitir alinhar os resultados à esquerda (-), obrigar a incluir sempre o sinal (+), colocar zeros no início (0), colocar espaços no início (‘ ‘) ou colocar parêntesis (() se o número for negativo.

Um outro método, de nome format(stringf, lista_valores), pode ser usado da mesma forma que printf(). Uma classe especial de nome Formatter oferece inúmeros métodos auxiliares para formatações complexas.

@ http://sim.di.uminho.pt/disciplinas/poo/0708/CAP2_TECNOLOGIA_JAVA5.pdf

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora