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
Você poderia usar um Array de int ou numa Collection de Integers.
…E como eu declaro uma Array?..
int[] intArray = new int[10]; // Por exemplo
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?..
Você pode usar um Collection, que não possui limitação de tamanho fixo, Por exemplo:
Code: |
|
Para usar a Collection:
Code: |
|
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: |
|
Para usar o Array:
Code: |
|
A vantegem desta forma é que aumenta a perfomance. Mas creio que usando Collection ou Array, os dois modos valem a pena.
Boa Sorte,
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…
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 < …
int x= arrayInteger[i].intValue();
ou será eu estou viajando…
É que o code do forum corrompeu o codigo. Na verdade o que o rucafonso propôs foi:
for(int i = 0; i < 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…
- Não é "<" é "<"! Entretanto, neste forum, quando se escreve entre as tags CODE, ele confunde "<" com a tag HTML "<". 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ê.
rucafonso e jack_-_ganzha
Espero que dessa vez a dúvida acabe… Eu já 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 já, Valeu!
Cátia
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 array de String. Então, vc declara o seu array de int 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. Dá na mesma.:-]
valeuz…
Vamos por partes
Quote: |
|
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: |
|
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

Quote: |
|
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,
Valeu!!! :-]