Seguinte pessoal, a minha duvida é bem basica mesmo… Comecei a pouco no Java, e ja encontrei umas pirraças na execução do programa.
A classe Numero, simplificada abaixo:
[code]int[] valor;
int a ;
Numero(){
valor=new int[0];
}
public void addNumero(int n){
int[] aux=new int [valor.length + 1];
for (int j=0; j<valor.length; j++){
aux[j] = valor[j];
}
valor=aux;
valor[valor.length - 1]=n;
}
int TotalNumeros(){
for (int i = 0; i <= valor.length; i = i + 1){
a=a+valor[i];
}
return a;
}[/code]
Fora isso, so tem uma outra classe que testa a Numeros usando a função TotalNumeros(). Porem, da esse erro:
[color=red]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at Numero.TotalNumeros(Numero.java:22)
at TestaNumero.main(TestaNumero.java:14)[/color]
Sendo que as linhas ali citadas são respectivamente a linha que tem “a=a+valor[i];” e a que chama a função TotalNumeros()
um vetor instanciado como [5] vai de [0] até [4] (conta nos dedinhos que isso dá 5: 0, 1, 2, 3, 4)
e você tá querendo ir de 0 até o o length ali, ou seja, de 0 a 5 no meu exemplo, mas só vai até 4
for (int i = 0; i < valor.length; i++) { // a condição para um antes da length, porque se for igual sai do loop
a += valor[i];
}
(detalhe: i = i +1 é o mesmo que i++, e a = a + valor[i] é o mesmo que a += valor[i])
Valeu pessoal! Até ali está resolvido, agora estou tendo problema com uma outro trecho. Essa é a classe toda:
[code]public class Numero {
int[] valor;
int a=0 ;
int b;
double media;
int auxmaior;
int auxmenor;
Numero(){
valor=new int[0];
}
public void addNumero(int n){
int[] aux=new int [valor.length + 1];
for (int j=0; j<valor.length; j++){
aux[j] = valor[j];
}
valor=aux;
valor[valor.length - 1]=n;
}
int TotalNumeros(){
for (int i = 0; i <= valor.length - 1; i++){
a=a+valor[i];
}
return a;
}
double getMedia(int m){
media=a/m;
return media;
}
int getMaiorNumero(){
for (int i = 0; i < valor.length; i = i + 1){
if(i!=0){
if (valor[i]>valor[i-1]){
auxmaior=valor[i];
}
}
}
return (auxmaior);
}
int getMenorNumero(){
for (int i = 0; i < valor.length-1; i = i + 1){
if(i!=0){
if (valor[i]<valor[i-1]){
if (valor[i]!=0){
auxmenor=valor[i];
}
}
}
}
return (auxmenor);
}
}[/code]
Dois problemas que estão acontecendo: O menor número retornado é sempre 0, acho que devo estar deixando o vetor com uma parte vazia; o outro erro que está acontecendo é o problema com zeros, se você digita 0 como um dos números do vetor, sempre dá um problema na media e no maior e menor. O que estou fazendo de errado?