Erro em Array

6 respostas
G

java.lang.ArrayIndexOutOfBoundsException: 2
bem, estou meio enrolado para fazer isso, preciso fazer uma classe que calcule a media de n numeros, entao primeiro, nao sei como declarar um vetor dinamico, e ai inicializei com 2 para testes, mas quando preencho 2 posicoes aparecem o resultado mas vem com o erro acima…

abaixo segue o codigo, se puderem me dar uma força agradeço

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.event.*;

public class Estatistica extends JFrame implements ActionListener, FocusListener{

JLabel lblValor = new JLabel(Informe o valor:);

JLabel lblResult = new JLabel(Resultado:);

JLabel lblDesvio = new JLabel();

JLabel lblMedia = new JLabel();

JTextField txtValor = new JTextField(12);

JButton cmdArmazenar = new JButton(Armazenar);

JButton cmdCalcular = new JButton(Calcular);

JButton cmdSair = new JButton(Sair);

//JTextArea txtArea = new JTextArea(10,25);

static int cont=0;

int [] vetor = new int[2];
public Estatistica(){
	// criando container
	Container c = getContentPane();
	// criando layout padrão
	c.setLayout(new FlowLayout());
	c.add(lblValor);
	c.add(txtValor);
	c.add(cmdArmazenar);
	c.add(cmdCalcular);
	c.add(cmdSair);
	c.add(lblResult);
	c.add(lblDesvio);
	c.add(lblMedia);
	
	//JScrollPane sp = new JScrollPane(txtArea);
    //c.add(sp);
    
	cmdArmazenar.addActionListener(this);
	cmdCalcular.addActionListener(this);
	
}
public void actionPerformed(ActionEvent ev){
		Object obj = ev.getSource();
		if(obj==cmdArmazenar){
			vetor[cont] = Integer.parseInt(txtValor.getText());
			txtValor.setText("");
			txtValor.requestFocus();
			cont++;		
		}
		else if(obj==cmdCalcular){
			int total = vetor.length;
			int i, acum=0;
			float media=0;
			for(i=0;i&lt;=total;i++){
				System.out.println(vetor[i]+"\n");
				acum=acum+vetor[i];
			}
			media = acum/total;
			//String retorno = String.valueOf(media);
			//lblMedia.setText(media);
			System.out.println(media);
		}
}
public void focusGained(FocusEvent f){ 
	// estou implementando o metodo pq pertence a interface FocusListener, mas nao vou implementar nada nele.
} 

// metodo de acao para o evento focus
public void focusLost(FocusEvent fo){
	//
}
	
public static void main(String args[]){
	Estatistica C = new Estatistica();
	C.setSize(300,300);
	C.setLocation(300,250);
	C.setTitle("Calculo de Médias");
	C.setResizable(false);
	C.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	C.show();
}

}

6 Respostas

B

Olá, o erro que vc citou só acontece quando vc insere o terceiro valor, né?! bom, dá uma olhada na classe java.util.Vector, é um “array” dinamico bem facil de usar.

G

vc poderia me explicar melhor como uso esse vector? sou iniciante mesmo e nao sei como implementar, teria algum exemplo?

B

Bom cara, a classe Vector é de simples uso… vou colocar alguns métodos util pra vc:

métodos
void add(Object) // adiciona um novo objeto ao vector
Object get(int) //retorna o objeto que vc incluiu naquele index
int size() // retorna quantos elementos tem dentro do vetor

então faça o seguinte:

import ajva.util.Vector;

public class ...
   private Vector vector = new Vector(); // declara e instanceia um vector como atributo da sua classe.

   public void actionPerformed(Ac...
     String numero = (leu o numero do JTextField);
     vector.add(numero);
 ...

   public double calculaMedia(){
     
     for(int x=0;x<vector.size();x++){
         String str = (String)vector.get(x); // pega o numero que foi inserido
         int numero = Integer.parseInt(str); // passa de string para int
         ....

E por ae vai…

G

poxa, cara, muito obrigado mesmo… hein, era isso mesmo, agora ficou bem bacana

obrigado

B

Tranquilo… a galera aqui está sempre pronto a ajudar.

S

Bom, numa olhada rápida percebi que o erro acontece por causa dessas linhas:

int [] vetor = new int[2];
for(i=0;i<=total;i++){

Você cria um array de 2 posições (0 e 1), daí no laço tenta acessar da posição 0 a 2, por isso o ArrayIndexOutOfBoundsException no índice 2.

A solução é fazer o for assim:

for(i = 0; i < total; i++){

Para ir de 0 a 1, apenas.

Outra coisa: não use Vector nesse exemplo, use ArrayList. Não vai fazer diferença no seu código, mas o ArrayList é mais rápido, porque seus métodos não são synchronized. :wink:

Criado 18 de maio de 2005
Ultima resposta 18 de mai. de 2005
Respostas 6
Participantes 3