Não acho o problema

5 respostas
B

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:
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;
		}

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!

5 Respostas

A

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

Mephy

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

B

Valeu pessoal! Até ali está resolvido, agora estou tendo problema com uma outro trecho. Essa é a classe toda:

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);
		
	}
}

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?

Mephy

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

B

Uhuuuuuuuuul! Deu certo! Valeu!

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

Criado 10 de abril de 2011
Ultima resposta 10 de abr. de 2011
Respostas 5
Participantes 3