Não acho o problema

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

Qual é o meu erro? Obrigado!

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3

http://download.oracle.com/javase/1.3/docs/api/java/lang/ArrayIndexOutOfBoundsException.html

Você que acredito estar começando tem de “andar com a documentação - Javadoc embaixo dos braços”.

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?

tente o getMenorNumero() como algo assim:

int menor = 0; for (int i = 0; i < valor.length; i++){ if (valor[i] > menor) menor = valor[i]; } return menor;

quanto ao erro do zero, é porque é impossível dividir por zero

Uhuuuuuuuuul! Deu certo! Valeu!

PS: A variavel menor só não pode ser 0, se não na comparação vai dar problemas