Erro arrayindexoutofbounds[resolvido]

9 respostas
P
Oi , sabem como resolver este problema:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 30
153, 53, 167, 200, 173, 147, 146, 128, 56, 178, 104, 161, 152, 115, 120, 153, 41, 142, 77, 54, 84, 18, 25, 149, 152, 145, 102, 178, 155, 14, 
Maior: 200 e sua posição é 3
Menor: 14 e sua posição é 29
	at Pesquisa.main(Pesquisa.java:177)
Segue abaixo o codigo:
[code]public static void main(String args[]) {
		int cont = 0;
		int num = 0;
		String s = JOptionPane.showInputDialog("Digite o tamanho do array: ");
		int x = Integer.parseInt(s);

		if(x >= 30){
			int array[] = new int[x];
			int a[] = new int[x];
			for (int i = 0; i < array.length; i++) {
				num = 1 + (int) (Math.random()*200);
				array[i] = num;
				System.out.print(array[i]+ ", ");
			}
			System.out.println("\n");
			int maior = array[0];
			int menor = array[0];
			int posMa = 0;
			int posMe = 0;

			for(int i = 0; i<array.length; i++){
				if(array[i]> maior){
					maior =array[i];
					posMa = i;
				}
				if(array[i]< menor){
					menor = array[i];
					posMe = i;	 
				}

			}
			System.out.println("Maior: "+ maior +" e sua posição é " +posMa);
			System.out.println("Menor: "+ menor +" e sua posição é " +posMe);

		}else{
			while(x < 30){
				String s1 = JOptionPane.showInputDialog("Digite novamente o tamanho do array: ");
				x = Integer.parseInt(s1);
				cont++;
				if(x >= 30){
					int arra[] = new int[x];
					for (int i = 0; i < arra.length; i++) {
						num = 1 + (int) (Math.random()*200);
						arra[i] = num;
						System.out.print(arra[i]+ ", ");

					}
					int maior = arra[0];
					int menor = arra[0];
					int posMa = 0;
					int posMe = 0;

					for(int i = 0; i<arra.length; i++){
						if(arra[i]> maior){
							maior =arra[i];
							posMa = i;
						}
						if(arra[i]< menor){
							menor = arra[i];
							posMe = i;	 
						}

					}
					System.out.println("\n");

					System.out.println("Maior: "+ maior +" e sua posição é " +posMa);
					System.out.println("Menor: "+ menor +" e sua posição é " +posMe);

					int contador = 0;int num1=0;
					int k[]=new int[x]; 
					//impares
					for(int i = 0; i<=arra.length;i++){
						if((arra[i])%2 != 0){
							num1=arra[i];
						}
						
					}
					for(int j = 0; j<=k.length;j++)
					{
						k[j]=num1;
						System.out.println(num1+"valor");
					}
					//pares
					for(int i = 0; i<=arra.length;i++){
						if((arra[i])%2 == 0){
							System.out.println("Posição: "+i + " Valor da Posição: "+arra[i]);	
							contador++;
						}
					}	
				

				}

			}
		}
[/code]

obrigada

9 Respostas

A

Boa tarde, gostaria de pedir que quando for postar um codigo utilize a tag code, para manter a formatação do código.
Referente a pergunta, esta excessão ocorre geralmente quando ele tenta recuperar uma posição de um array que não existe, se você tem 30 número, eles serão armazenados na posição 0 até 29, se tentar recuperar a posição 30 que não existe, esta excessão será lançada.

P

ok na proxima vez eu coloco as tags ,
sou nova no forum
obrigada pela ajuda mas tu sabe como eu posso fazer para tirar so os elementos pares daquele array?

obrigada :smiley:

A

Cuidado ao dar nomes, no título vc chama de erro, mas na verdade é exceção, erro é um outro contexto tal como StackOverFlowError dentre outros.

joaodaniel

Quanto a sua dúvida no tópico vou tentar dar uma olhada no código, mas você poderia começar tornando-o um pouco mais orientado a objetos.
A programação está com cara de procedural, você com certeza poderia melhorar muito o código acrescentando métodos para testar se é par ou não, etc.

P
o problem aesta neste for pois ele nao executa
for(int j=0;j<k.length;j++){
	k[j]=num1;
	System.out.println(k[j]+" ");
							
}
A

Boa tarde, como nosso amigo falou, não tem “nada” orientado a objetos, vou postar um exemplo que também não possui nenhuma orientação a objetos, pois creio eu que você ainda não tem muito dominio sobre o assunto.

import static javax.swing.JOptionPane.*;

public class Atendimento {
	public static void main(String args[]) {

		int array[];
		while (true) {
			String s = showInputDialog("Digite o tamanho do array: ");
			if (s == null)
				System.exit(0);
			try {
				int x = Integer.parseInt(s);
				if (x < 30) {
					showMessageDialog(
							null,
							"Dado inválido!\nInforme um número igual ou maior que 29",
							"Erro", ERROR_MESSAGE);
					continue;
				}
				array = new int[x];
				break;
			} catch (NumberFormatException nfe) {
				showMessageDialog(null,
						"Dado inválido!\nInforme um número inteiro", "Erro",
						ERROR_MESSAGE);
			}
		}

		String aux = "";
		int j = 0;
		for (int i = 0; i < array.length; i++) {
			array[i] = 1 + (int) (Math.random() * 200);
			if (i - j == 10) {
				j = i;
				aux += "\n";
			}
			aux += array[i] + ", ";
		}

		String pares = "", impares = "";
		int par = 0, impar = 0, k = 0, l = 0;
		for (int i = 0; i < array.length; i++) {
			if (array[i] % 2 == 0) {
				if (par - k == 10) {
					pares += "\n";
					k = par;
				}
				pares += array[i] + ", ";
				par++;
			} else {
				if (impar - l == 10) {
					impares += "\n";
					l = impar;
				}
				impares += array[i] + ", ";
				impar++;
			}
		}
		showMessageDialog(null, "Numeros Sorteados:\n" + aux
				+ "\n\nQuantidade de elementos sorteados:  " + array.length
				+ "\n\n-------------------------------" + "\n\nNumeros pares: \n"
				+ pares + "\n\nQuantidade de pares:   " + par
				+ "\n\n-------------------------------"
				+ "\n\nNúmeros Impares:\n" + impares
				+ "\n\nQuantidade de impares:   " + impar, "Informação", PLAIN_MESSAGE);
	}
}
F

Para tirar os elementos pares é só remover da lista onde o resto da divisao por 2 for = 0…mas o codigo deixamos que vc implemente e poste duvidas caso tenha…

marcelo.bellissimo

paty_trind:
ok na proxima vez eu coloco as tags ,
sou nova no forum
obrigada pela ajuda mas tu sabe como eu posso fazer para tirar so os elementos pares daquele array?

obrigada :D

Faça um outro ‘for’ e verifique cada elemento, divida por 2 e veja se o resto da divisão é igual á 0… se for, é número par, senão, é ímpar…

if ( numero%2 == 0) { // par }else{ // impar }

P

obrigada pela ajuda gente,
:smiley:

Criado 16 de novembro de 2010
Ultima resposta 16 de nov. de 2010
Respostas 9
Participantes 6