| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 08:35:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
Bom Dia pessoALL!
<BR>
<BR>Estou com uma dúvida em um exercício e gostaria da ajuda de vocês.
<BR>
<BR>Escreva uma aplicação que receba <!-- BBCode Start --><B>um número variável de argumentos numéricos inteiros</B><!-- BBCode End --> especificados pelo usuário, (a) a quantidade de valores recebidos, (b) a somatória de todos os valores, (c) o produto de todos os valores e (d) a média aritmética de todos os valores.
<BR>
<BR>Imagino que deva ser feito como uma matriz, mas eu não sei como...
<BR>
<BR>Desde já agradeço,
<BR>Cátia
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 10:09:00
|
rucafonsoPJ
Debugger
![[Avatar]](/images/avatar/0)
Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline
|
Você poderia usar um Array de int ou numa Collection de Integers.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 10:27:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
...E como eu declaro uma Array?...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 10:31:00
|
rucafonsoPJ
Debugger
![[Avatar]](/images/avatar/0)
Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline
|
int[] intArray = new int[10]; // Por exemplo
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 10:38:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
Mas no caso ele não determina o número de argumentos que será recebido...
<BR>
<BR>Se eu colocar o new int[10] ele recebera até 10 argumentos?...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 11:14:00
|
rucafonsoPJ
Debugger
![[Avatar]](/images/avatar/0)
Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline
|
Você pode usar um Collection, que não possui limitação de tamanho fixo, Por exemplo:
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>Collection colInts = new ArrayList(); // Ou LinkedList, ou Vector, ou HashSet, o que for mais conveniente.
<BR>// Voce pega seus números de algum lugar.
<BR>// Para cada número ...
<BR>colInts.add(new Integer(meuInt));
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>Para usar a Collection:
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>Iterator itInt = colInts.iterator();
<BR>while(itInt.hasNext()) {
<BR> int i = ((Integer)itInt.next()).intValue();
<BR> // Usar i conforme as necessidades
<BR>}
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>Agora supondo que uma vez lido os dados você não irá colocar mais dados nela, é possível tranformar a Collection em um Array de Integers. Desta forma:
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>// Depois de ler os dados.
<BR>Integer[] arrayInteger = colInts.toArray()
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>Para usar o Array:
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>for(int i = 0; i < arrayInteger.length; i ++) {
<BR> int x = arrayInteger[i].intValue();
<BR> // faz uso de x
<BR>}
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>A vantegem desta forma é que aumenta a perfomance. Mas creio que usando Collection ou Array, os dois modos valem a pena.
<BR>
<BR>Boa Sorte,
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 11:16:00
|
jack_-_ganzhaPJ
Java Ninja
![[Avatar]](/images/avatar/0)
Membro desde: 11/02/2003 00:00:00
Mensagens: 254
Localização: 171007919
Offline
|
Se os argumentos forem passados no console vc pode fazer assim:
<BR>
<BR>public static void main(String[] args) {
<BR>
<BR> int[] array = new int[args.length()];
<BR>
<BR>}
<BR>
<BR>Assim, vc define o array de inteiros de acordo com a quantidade de argumentos passados para a main no console.
<BR>
<BR>Se for de outra maneira qualquer tente usar um Vector assim:
<BR>
<BR>java.util.Vector vetor = java.util.Vector();
<BR>
<BR>E depois que vc receber o int:
<BR>
<BR>vetor.add(new Integer(seuInt));
<BR>
<BR>Pronto. O vector vai crescer de acordo com a sua necessidade.
<BR>
<BR>valeuz...
|
http://www.javafree.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 11:41:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
Acho que no meu caso, que estou iniciando o comando Array parece mais simples...
<BR>
<BR>Pelo que eu entendi então eu devo declarar assim...
<BR>
<BR>int[] array = new int[args.length()];
<BR>
<BR>for(int i = 0; i < arrayInteger.length; i ++) { // não entendi o < ...
<BR>
<BR> int x= arrayInteger[i].intValue();
<BR>
<BR>
<BR>ou será eu estou viajando...
<BR>
<BR>
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 11:58:00
|
jack_-_ganzhaPJ
Java Ninja
![[Avatar]](/images/avatar/0)
Membro desde: 11/02/2003 00:00:00
Mensagens: 254
Localização: 171007919
Offline
|
É que o code do forum corrompeu o codigo. Na verdade o que o rucafonso propôs foi:
<BR>
<BR>for(int i = 0; i <!-- BBCode Start --><B><</B><!-- BBCode End --> arrayInteger.length; i ++) {
<BR> int x = arrayInteger[i].intValue();
<BR> // faz uso de x
<BR>}
<BR>
<BR>Ou seja, percorrer o array a posição zero(0) até o seu tamanho(length).
<BR>
<BR>valeuz...
<BR>
|
http://www.javafree.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 12:04:00
|
rucafonsoPJ
Debugger
![[Avatar]](/images/avatar/0)
Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline
|
1) Não é "<" é "<"! Entretanto, neste forum, quando se escreve entre as tags CODE, ele confunde "<" com a tag HTML "<". O equivalente ocorre quando se usa ">". <!-- BBCode Start --><I>Será que algum mantenedor deste fórum não poderia dar um jeito nisso?</I><!-- BBCode End -->. Isso sempre acontece! :-Y
<BR>2) Seu código contém alguns erros:
<BR>2.1) args é um array de Strings (Os argumentos que passou para o programa), não de ints.
<BR>2.2) primeiro você usa o array de int array[] e depois faz uso do array de Integers arrayInteger. Se refere a mesma coisa?
<BR>3) Reescreveria seu código assim:
<BR>
<BR>// Supondo que os argumentos são passados como argumentos do programa
<BR>static void main(String args[]) {
<BR> // Convertendo o array de Strings e um array de ints
<BR> int[] intArgs = new int[args.length]; // length é um atributo do array, não um método.
<BR> for(int i = 0; i < args.length; i ++) {
<BR> intArgs[i] = Integer.parseInt(args[i]); // Se algum argumento não for um inteiro, é disparada uma NumberFormatException.
<BR> }
<BR> // faz uso de intArgs[]
<BR>}
<BR>
<BR>Espero que isso sirva para você.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 12:39:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
rucafonso e jack_-_ganzha
<BR>
<BR>Espero que dessa vez a dúvida acabe... Eu já tentei compilar e está tudo ok!
<BR>sendo que eu ainda tenho alguma perguntas... O restante eu acho que sei como fazer.
<BR>
<BR>
<BR>
<BR>public class Exerc14 {
<BR> public static void main(String[] args) {
<BR>
<BR> int[] intArgs = new int[args.length];
<BR> //o atributo args.length funcionaria como um vetor, é isso?...
<BR> //ele já me traria o total de argumentos inseridos?
<BR>
<BR> for(int i = 0; i < args.length; i ++) {
<BR> intArgs[i] = Integer.parseInt(args[i]);
<BR> // no lugar do intArgs eu poderia utilizar outro nome? intX ...
<BR>}
<BR> System.out.println("quantidade de valores recebidos:"+(i));
<BR> // Eu devo mandar imprimir (i) ou (intArgs)
<BR>
<BR> }
<BR> }
<BR>}
<BR>
<BR>
<BR>Desde já, Valeu!
<BR>Cátia
<BR>
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 13:00:00
|
jack_-_ganzhaPJ
Java Ninja
![[Avatar]](/images/avatar/0)
Membro desde: 11/02/2003 00:00:00
Mensagens: 254
Localização: 171007919
Offline
|
Catia, o meu exemplo para que vc usasse args.length assume que vc está executando a sua classe, por exemplo, assim:
<BR>
<BR>java Exerc14 1 20 3 4 5
<BR>
<BR>outro exemplo:
<BR>
<BR>java Exerc14 21 354 3 15 654 22 17 5
<BR>
<BR>Ou seja, vc está passando os argumentos por linha de comando. Daí, a main está recebendo args[], que é um <!-- BBCode Start --><B>array</B><!-- BBCode End --> de String. Então, vc declara o seu array de <!-- BBCode Start --><B>int</B><!-- BBCode End --> do mesmo tamanho do numero de argumento passados na linha de comando.
<BR>
<BR>Agora as outras perguntas:
<BR>1. "no lugar do intArgs eu poderia utilizar outro nome?"
<BR>Sim, vc poderia declarar com outro nome. Poderia ser, por exemplo, arrayDaCatia.
<BR>
<BR>2. "System.out.println("quantidade de valores recebidos:"+(i));
<BR>// Eu devo mandar imprimir (i) ou (intArgs)?".
<BR>Eu mandaria imprimir o tamanho do array. Assim:
<BR>System.out.println("quantidade de valores recebidos:"+(intArgs.length));
<BR>
<BR>Mas, não tem problema imprimir o i. Dá na mesma.:-]
<BR>
<BR>valeuz...
<BR>
|
http://www.javafree.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 13:12:00
|
rucafonsoPJ
Debugger
![[Avatar]](/images/avatar/0)
Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline
|
Vamos por partes
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR> public static void main(String[] args) {
<BR>
<BR> int[] intArgs = new int[args.length];
<BR> //o atributo args.length funcionaria como um vetor, é isso?...
<BR> //ele já me traria o total de argumentos inseridos?
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>O vetor (de Strings) é args. args.length é o tamanho deste vetor. E, sim ele te traz o número de argumentos.
<BR>Uma coisa length diz respeito ao número de posições - ou "casinhas - reservadas ao array na memória, independente de todas as "casinhas" serem utilizadas ou não. Por exemplo, suponha que você faça int[] inrArray = new int[10] e você preenche as posições de 0 a 4. Quando pedir intArray.length, o programa retornará 10, pois é quanto você reservou para o array. Os valores 5 a 9, que não foram preenchidos conterão lixo, valores aletórios (ou conteria 0´s? Agora não tenho certeza).
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR> for(int i = 0; i < args.length; i ++) {
<BR> intArgs[i] = Integer.parseInt(args[i]);
<BR> // no lugar do intArgs eu poderia utilizar outro nome? intX ...
<BR>}
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>Claro que pode! Lembro-me de uma colega minha que nomeava seus programas pelos simpáticos nomes de "pudim", "sorvete" e coisas do gênero . Portanto Se quiser pode chamar seu array de "jacas", "maçãs", etc . As únicas restrições ao nomear as variáveis é que elas devem começar por letras, underscore ("_" ou cifrão ("$" . Portanto não vale chamar "2array", por exemplo. É claro que quanto mais seu nome"tiver a ver" com o que estiver fazendo, melhor para a compreensão do código para as pessoas.
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR> System.out.println("quantidade de valores recebidos:"+(i));
<BR> // Eu devo mandar imprimir (i) ou (intArgs)
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>Você deve imprimir intArgs.length. Além disso, como "i" foi definido dentro do for(), ele será "visível" dentro do for(). Se utilizá-lo fora vai dar erro de compilação.
<BR>
<BR>Espero que isso sirva,
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2003 14:01:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
Valeu!!! :-]
|
|
|
 |
|
|