Erro de manipulação no array

5 respostas
F

Alguém poderia me ajudar a saber qual é o problema aqui que está causando erro? Ainda não conseguir descobrir.

import java.io.*;

public class Teste {
		
	public static void main(String[] args) {
		int N = 1;
		int iPos = 0;
		int iCont = N;
		
		char Lista[] = new char[N];
		
		System.out.println("____________________________________");
		System.out.println("             INCLUSÃO");
		System.out.println("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯");
		System.out.print("Digite uma \"Letra\" >> ");
		char cLetra = LerChar();
				
		while(iPos <= N && Lista[iPos] < cLetra){
			iPos++;
		}
		
		if(Lista[iPos] == cLetra){
			System.out.println("A Letra informada  existe!");
		} else {
			iCont = N;

			while(iCont > iPos){
				Lista[iCont+1] = Lista[iCont];
				iCont++;
			}
				
			Lista[iPos] = cLetra;
			N++;
		}
		
		System.exit(0);
	}
	
	public static char LerChar() {
		try {
			BufferedReader BR =	new BufferedReader(new InputStreamReader(System.in));

			String S = BR.readLine();
			return S.charAt(0);
			
		} catch (IOException e) {
			return (' ');
			
		} catch (NumberFormatException e) {
			return (' ');
			
		}
	}
}

Abraços
Fábio Heleno

5 Respostas

T

dae cara, blz>>
pelo q estou vendo, o seu array estah começando com uma única posição, pois N tem o valor 1, e com o valro default…ou seja …acho que eh null…
portanto ao comprar se o conteudo da posicao do array é maior que a letra digitada, ele gera a exceção, pois não consegue comparar null, com o char…
caso não seja isto, se vc analisar , vc verá q estah incrementando o ipos , como na primeira iteração ele eh zero, ele funciona, e entra no while, passando para 1, mas quando ele compara novamente para ver se fica no while o programa reconhece os seguintes dados:
ipos contendo 1 e comparando com N(que eh igual a 1), ele passa por este teste, e logo em seguida ele tenta acessar a posição 1 do array (Lista[Ipos], e talvez gera exceção aqui como arrayIndexOutBound( pois o array tem apenas 1 posição, no caso a posição zero)…

eu não testei o codigo, mas se eu fosse vc, colocaria um println depois das linhas que vc estah en dúvida, para seguir os passos…

M

Tenta colocar no trecho:

while(iPos <= N && Lista[iPos] < cLetra){ 
         iPos++; 
      }

Lista.length

acho que dá certo

T

acabei de testar o seu program e verifiquei que é do arrayIndexOutOfBounf]d mesmo…ou seja, na hora q vc incrementa iPos, ele gera a exceção…
não entendi o que vc quer fazer com este código, senão poderia tentar dar alguma dica…
teh mais…
espero tê-lo ajudado

F

Ele gera esse erro mesmo.
Eu transformei um metodo em uma classe para postar aqui, mais na realidade é um metodo de uma classe cujo o programa faz inclusao, alteração, exclusão e atravessamento. Trabalho de faculdade.

Vou tentar as dicas que me deram e retorno assim que tentar.

Valeu pela atenção…

Abraços
Fábio Heleno

F

Conseguir avançar.... :viva:

Agora ele aceita o cadastro, mais a cada cadastro novo, ele zera o anterior... hehehe...alguém poderia me ajudar? :wink:

Postei o codigo de tal maneira que basta so copiar e rodar.

Inclusao
import java.io.*;

public class TesteArray {
		
	public static void main(String[] args) {
		int iValorFinal = 0;
		int opcao = 0;
		char Lista[] = new char[iValorFinal];
		
		do{
			System.out.println("\n");
			System.out.println("1 - Inclusao");
			System.out.println("2 - Sair");
			System.out.print("\n==> ");
			opcao = ConsoleInt();
			
			if(opcao == 1){
				System.out.println();
				System.out.println("____________________________________");
				System.out.println("             INCLUSÃO");
				System.out.println("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯");
				System.out.print("Digite uma \"Letra\" >> ");
				char Letra = ConsoleChar();
					
				Lista = new char[iValorFinal+1];
					
				int iPos = 0;
				int iCont;

				while((iPos < iValorFinal) && (Lista[iPos] < Letra)){
					iPos++;
				}
					
				if(Lista[iPos] == Letra){
					System.out.println("A Letra informada  existe!");
				} else {
					iCont = iValorFinal;
					
					while(iCont > iPos){
						Lista[iCont+1] = Lista[iCont];
						iCont++;
					}
							
					Lista[iPos] = Letra;
					iValorFinal++;
				}
					
				System.out.println();
				int posicao = 0;
				while(posicao < iValorFinal){
					System.out.println("Posição: [" + posicao + "] -> Letra: " + Lista[posicao]);
					posicao++;
				}
				System.out.println();
				System.out.println("Tecle <ENTER> para continuar...");
				ConsoleInt();
			}
			
		}while(opcao != 2);
	}

	public static char ConsoleChar() {
		try {
			BufferedReader BR =	new BufferedReader(new InputStreamReader(System.in));

			String S = BR.readLine();
			return S.charAt(0);
		} catch (IOException e) {
			return ('0');
		} catch (NumberFormatException e) {
			return ('0');
		}
	}
	public static int ConsoleInt() {
		try {
			BufferedReader BR =	new BufferedReader(new InputStreamReader(System.in));

			String S = BR.readLine();
			return Integer.parseInt(S);
		} catch (IOException e) {
			return (0);
		} catch (NumberFormatException e) {
			return (0);
		}
	}
}
Criado 19 de agosto de 2004
Ultima resposta 20 de ago. de 2004
Respostas 5
Participantes 3