receber um número variável de argumentos numéricos inteir  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
CatiaPJ
Thread.start()
[Avatar]

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
[WWW] aim icon [ICQ]
rucafonsoPJ
Debugger
[Avatar]

Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline

Você poderia usar um Array de int ou numa Collection de Integers.
[WWW] aim icon [ICQ]
CatiaPJ
Thread.start()
[Avatar]

Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline

...E como eu declaro uma Array?...
[WWW] aim icon [ICQ]
rucafonsoPJ
Debugger
[Avatar]

Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline

int[] intArray = new int[10]; // Por exemplo
[WWW] aim icon [ICQ]
CatiaPJ
Thread.start()
[Avatar]

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?...
[WWW] aim icon [ICQ]
rucafonsoPJ
Debugger
[Avatar]

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 &lt; 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,
[WWW] aim icon [ICQ]
jack_-_ganzhaPJ
Java Ninja
[Avatar]

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
[WWW] aim icon [ICQ]
CatiaPJ
Thread.start()
[Avatar]

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 &lt; arrayInteger.length; i ++) { // não entendi o &lt ... <BR> <BR> int x= arrayInteger[i].intValue(); <BR> <BR> <BR>ou será eu estou viajando... <BR> <BR>
[WWW] aim icon [ICQ]
jack_-_ganzhaPJ
Java Ninja
[Avatar]

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
[WWW] aim icon [ICQ]
rucafonsoPJ
Debugger
[Avatar]

Membro desde: 06/02/2003 00:00:00
Mensagens: 57
Offline

1) Não é "&lt" é "<"! Entretanto, neste forum, quando se escreve entre as tags CODE, ele confunde "<" com a tag HTML "&lt". 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ê.
[WWW] aim icon [ICQ]
CatiaPJ
Thread.start()
[Avatar]

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>
[WWW] aim icon [ICQ]
jack_-_ganzhaPJ
Java Ninja
[Avatar]

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
[WWW] aim icon [ICQ]
rucafonsoPJ
Debugger
[Avatar]

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,
[WWW] aim icon [ICQ]
CatiaPJ
Thread.start()
[Avatar]

Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline

Valeu!!! :-]
[WWW] aim icon [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team