Receber um número variável de argumentos numéricos inteir

13 respostas
C

Bom Dia pessoALL!



Estou com uma dúvida em um exercício e gostaria da ajuda de vocês.



Escreva uma aplicação que receba um número variável de argumentos numéricos inteiros especificados pelo usuário, (a) a quantidade de valores recebidos, (b) a somatória de todos os valores, © o produto de todos os valores e (d) a média aritmética de todos os valores.



Imagino que deva ser feito como uma matriz, mas eu não sei como…



Desde já agradeço,

Cátia

13 Respostas

R

Você poderia usar um Array de int ou numa Collection de Integers.

C

…E como eu declaro uma Array?..

R

int[] intArray = new int[10]; // Por exemplo

C

Mas no caso ele não determina o número de argumentos que será recebido…



Se eu colocar o new int[10] ele recebera até 10 argumentos?..

R

Você pode usar um Collection, que não possui limitação de tamanho fixo, Por exemplo:

Code:


Collection colInts = new ArrayList(); // Ou LinkedList, ou Vector, ou HashSet, o que for mais conveniente.

// Voce pega seus números de algum lugar.

// Para cada número …

colInts.add(new Integer(meuInt));




Para usar a Collection:

Code:


Iterator itInt = colInts.iterator();

while(itInt.hasNext()) {

int i = ((Integer)itInt.next()).intValue();

// Usar i conforme as necessidades

}




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:

Code:


// Depois de ler os dados.

Integer[] arrayInteger = colInts.toArray()




Para usar o Array:

Code:


for(int i = 0; i < arrayInteger.length; i ++) {

int x = arrayInteger[i].intValue();

// faz uso de x

}




A vantegem desta forma é que aumenta a perfomance. Mas creio que usando Collection ou Array, os dois modos valem a pena.



Boa Sorte,
J
Se os argumentos forem passados no console vc pode fazer assim:





public static void main(String[] args) {





  int[] array = new int[args.length()];





}





Assim, vc define o array de inteiros de acordo com a quantidade de argumentos passados para a main no console.





Se for de outra maneira qualquer tente usar um Vector assim:





java.util.Vector vetor = java.util.Vector();





E depois que vc receber o int:





vetor.add(new Integer(seuInt));





Pronto. O vector vai crescer de acordo com a sua necessidade.





valeuz
C
Acho que no meu caso, que estou iniciando o comando Array parece mais simples





Pelo que eu entendi então eu devo declarar assim





int[] array = new int[args.length()];





for(int i = 0; i < arrayInteger.length; i ++) {  // não entendi o &lt 





     int x= arrayInteger[i].intValue();








ou será eu estou viajando
J
É que o code do forum corrompeu o codigo. Na verdade o que o rucafonso propôs foi:





for(int i = 0; i <b><</b> arrayInteger.length; i ++) {


   int x = arrayInteger[i].intValue();


   // faz uso de x


}





Ou seja, percorrer o array a posição zero(0) até o seu tamanho(length).





valeuz
R
  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 ">". Será que algum mantenedor deste fórum não poderia dar um jeito nisso?. Isso sempre acontece! :-Y

    2) Seu código contém alguns erros:

    2.1) args é um array de Strings (Os argumentos que passou para o programa), não de ints.

    2.2) primeiro você usa o array de int array[] e depois faz uso do array de Integers arrayInteger. Se refere a mesma coisa?

    3) Reescreveria seu código assim:



    // Supondo que os argumentos são passados como argumentos do programa

    static void main(String args[]) {

    // Convertendo o array de Strings e um array de ints

    int[] intArgs = new int[args.length]; // length é um atributo do array, não um método.

    for(int i = 0; i < args.length; i ++) {

    intArgs[i] = Integer.parseInt(args[i]); // Se algum argumento não for um inteiro, é disparada uma NumberFormatException.

    }

    // faz uso de intArgs[]

    }



    Espero que isso sirva para você.
C
rucafonso e jack_-_ganzha





Espero que dessa vez a dúvida acabe Eu  tentei compilar e está tudo ok!


sendo que eu ainda tenho alguma perguntas O restante eu acho que sei como fazer.











public class Exerc14 {


    public static void main(String[] args) {





       int[] intArgs = new int[args.length];


       //o atributo args.length funcionaria como um vetor, é isso?..


       //ele já me traria o total de argumentos inseridos?





       for(int i = 0; i < args.length; i ++) {


           intArgs[i] = Integer.parseInt(args[i]);


           // no lugar do intArgs eu poderia utilizar outro nome? intX …


}


         System.out.println("quantidade de valores recebidos:"+(i));


         // Eu devo mandar imprimir (i) ou (intArgs)





       }


   }


}








Desde , Valeu!


Cátia
J
Catia, o meu exemplo para que vc usasse args.length assume que vc está executando a sua classe, por exemplo, assim:





java Exerc14 1 20 3 4 5





outro exemplo:





java Exerc14 21 354 3 15 654 22 17 5





Ou seja, vc está passando os argumentos por linha de comando. Daí, a main está recebendo args[], que é um <b>array</b> de String. Então, vc declara o seu array de <b>int</b> do mesmo tamanho do numero de argumento passados na linha de comando.





Agora as outras perguntas:


1. "no lugar do intArgs eu poderia utilizar outro nome?"


Sim, vc poderia declarar com outro nome. Poderia ser, por exemplo, arrayDaCatia.





2. "System.out.println("quantidade de valores recebidos:"+(i));


// Eu devo mandar imprimir (i) ou (intArgs)?".


Eu mandaria imprimir o tamanho do array. Assim:


System.out.println("quantidade de valores recebidos:"+(intArgs.length));





Mas, não tem problema imprimir o i.  na mesma.:-]





valeuz
R

Vamos por partes

Quote:


public static void main(String[] args) {



int[] intArgs = new int[args.length];

//o atributo args.length funcionaria como um vetor, é isso?..

//ele já me traria o total de argumentos inseridos?




O vetor (de Strings) é args. args.length é o tamanho deste vetor. E, sim ele te traz o número de argumentos.

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).

Quote:


for(int i = 0; i < args.length; i ++) {

intArgs[i] = Integer.parseInt(args[i]);

// no lugar do intArgs eu poderia utilizar outro nome? intX …

}




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 :slight_smile: . 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.

Quote:


System.out.println("quantidade de valores recebidos:"+(i));

// Eu devo mandar imprimir (i) ou (intArgs)




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.



Espero que isso sirva,
C

Valeu!!! :-]

Criado 10 de março de 2003
Ultima resposta 10 de mar. de 2003
Respostas 13
Participantes 3