Argumentos para lidar com Matriz

9 respostas
F

Ae pessoal!!!

Não estou conseguindo achar uma solução para lidar com esta matriz. Acho eu, que não estou acertando no argumento.

Matriz e Variável:

static int N = 0;
static char Lista[] = new char[N];

Chamada: (com argumentos)

if(opcao == 1) {
	Inclusao(Lista, N);
}

Sub-Rotina:

public static void Inclusao(char Lista[],int n) {
	char cLetra;
	int iPos = 0, iCont;
		
	System.out.println("Digite a \"Letra\" que deseja incluir:");
	cLetra = ConsoleChar();
		
	while(iPos <= n && Lista[iPos] < cLetra){
		iPos++;
	}
}

Erro:

java.lang.ArrayIndexOutOfBoundsException: 0
	at Menu.Inclusao(Menu.java:31)
	at Menu.main(Menu.java:89)
Exception in thread "main"

Alguém saberia me ajudar?

Abraços
Fábio Heleno

9 Respostas

V

O erro indica que você esta tentando acessar uma posição fora do array.

Seu código esta correto, mas no loop while você está tentando acessar uma posição a mais, retire o <= e coloque < apenas deste modo

while&#40;iPos &lt; n &amp;&amp; Lista&#91;iPos&#93; &lt; cLetra&#41;

Uma dica você não precisa passar o valor de n como argumento pois um array pode retornar o número de elementos dele proprio da seguinte maneira.

nomeDoArray.length;
F

engraçado que do while passou, mais desta comparação não passa…

sub-rotina Inclusao()

public static void Inclusao&#40;char Lista&#91;&#93;,int n&#41; &#123; 
   char cLetra; 
   int iPos = 0, iCont; 
       
   System.out.println&#40;"Digite a \"Letra\" que deseja incluir&#58;"&#41;; 
   cLetra = ConsoleChar&#40;&#41;; 
       
   while&#40;iPos &lt;= n &amp;&amp; Lista&#91;iPos&#93; &lt; cLetra&#41;&#123; 
      iPos++; 
   &#125;

   //*********AQUI DA ERRO***********
   if&#40;cLetra == cList&#91;iPos&#93;&#41;&#123;
      System.out.println&#40;"Letra já existe!"&#41;;
   &#125; else &#123;
   ..........
   ......
   &#125;
&#125;

não entendi o erro… será que estou enviando corretamento os argumentos? porque sempre da erro ai

ERRO

java.lang.ArrayIndexOutOfBoundsException&#58; 1 at Menu.Inclusao&#40;Menu.java&#58;33&#41; at Menu.main&#40;Menu.java&#58;91&#41; Exception in thread &quot;main&quot;

V

Quando ele passa do while quer dizer que a variável iPos já esta com valor maior que n conforme a verificação [color=“red”]ipos <= n[/color] portanto cheque no if se o valor de ipos ja está alem da ultima posição

F

Assim… essa parte entendi, tanto que ele passa do while, mais logo seguinte começa algumas condições e da erro.

Fiz esta bateria de testes e ele nao passa do primeiro.

public static void Inclusao&#40;char List&#91;&#93;,int n&#41; &#123;
char cLetra;
int iPos = 0;
int iCont;

System.out.println&#40;"Digite a \"Letra\" que deseja incluir&#58;"&#41;;
cLetra = ConsoleChar&#40;&#41;;
		
while&#40;iPos &lt; n &amp;&amp; List&#91;iPos&#93; &lt; cLetra&#41;&#123;
	System.out.println&#40;"passou " + iPos&#41;;
	iPos++;
&#125;


//INICIO DO ERRO
if&#40;List&#91;iPos&#93; &gt; cLetra&#41;&#123;
//FIM DO ERRO
	System.out.println&#40;"Lista&#91;iPos&#93; &gt; cLetra"&#41;;
&#125;
if&#40;List&#91;iPos&#93; &lt; cLetra&#41;&#123;
	System.out.println&#40;"Lista&#91;iPos&#93; &lt; cLetra"&#41;;
&#125;
if&#40;List&#91;iPos&#93; == cLetra&#41;&#123;
	System.out.println&#40;"Lista&#91;iPos&#93; == cLetra"&#41;;
&#125;
if&#40;List&#91;iPos&#93; &lt;= cLetra&#41;&#123;
	System.out.println&#40;"Lista&#91;iPos&#93; &lt;= cLetra"&#41;;
&#125;
if&#40;List&#91;iPos&#93; &gt;= cLetra&#41;&#123;
	System.out.println&#40;"Lista&#91;iPos&#93; &gt;= cLetra"&#41;;
&#125;

Nesse ponto do erro, ele para com os seguintes dados:

List = char[0] (id=13)
n = 0
cLetra = A
iPos = 0

e apresenta este erro:

java.lang.ArrayIndexOutOfBoundsException&#58; 0
F

achei uma solução! fazer um condição caso o vetor esteja nulo(vazio), já impedindo que der erro.

Infelizmente, a condição que aplico, de que (List == null) não da certo.
Alguma alma caridosa poderia me ajuda? hehe

public static void Inclusao&#40;char List&#91;&#93;,int n&#41; &#123;
	char cLetra;
	int iPos = 0;
	int iCont;
		
	System.out.println&#40;"Digite a \"Letra\" que deseja incluir&#58;"&#41;;
	cLetra = ConsoleChar&#40;&#41;;
		
	while&#40;iPos &lt; n &amp;&amp; List&#91;iPos&#93; &lt; cLetra&#41;&#123;
		iPos++;
	&#125;

	if&#40;List == null&#41;&#123;
		System.out.println&#40;"Vetor Vazio!"&#41;;
	&#125; else &#123;
		if&#40;List&#91;iPos&#93; == cLetra&#41;&#123;
			System.out.println&#40;"Letra já existe!"&#41;;
		&#125; else &#123;
			iCont = n;
			while&#40;iCont &gt; iPos&#41;&#123;
				List&#91;iCont+1&#93; = List&#91;iCont&#93;;
				iCont++;
			&#125;
		List&#91;iPos&#93; = cLetra;
		System.out.println&#40;List&#91;iPos&#93;&#41;;
		n++;
		&#125;
	&#125;
&#125;
F

achei uma solução! fazer um condição caso o vetor esteja nulo(vazio), já impedindo que der erro.

Infelizmente, a condição que aplico, de que (List == null) não da certo.
Alguma alma caridosa poderia me ajuda? hehe

public static void Inclusao&#40;char List&#91;&#93;,int n&#41; &#123;
	char cLetra;
	int iPos = 0;
	int iCont;
		
	System.out.println&#40;"Digite a \"Letra\" que deseja incluir&#58;"&#41;;
	cLetra = ConsoleChar&#40;&#41;;
		
	while&#40;iPos &lt; n &amp;&amp; List&#91;iPos&#93; &lt; cLetra&#41;&#123;
		iPos++;
	&#125;

	if&#40;List == null&#41;&#123;
		System.out.println&#40;"Vetor Vazio!"&#41;;
	&#125; else &#123;
		if&#40;List&#91;iPos&#93; == cLetra&#41;&#123;
			System.out.println&#40;"Letra já existe!"&#41;;
		&#125; else &#123;
			iCont = n;
			while&#40;iCont &gt; iPos&#41;&#123;
				List&#91;iCont+1&#93; = List&#91;iCont&#93;;
				iCont++;
			&#125;
		List&#91;iPos&#93; = cLetra;
		System.out.println&#40;List&#91;iPos&#93;&#41;;
		n++;
		&#125;
	&#125;
&#125;
V

Pois é cara, mais ja imaginou o que acontece quando ele chega no final do loop e não encontra um caracter que é menor que cLetra. o seu valor iPos ficará maior que o array e quando você sai do loop e tenta acessar denovo o array na posição iPos encontrará o mesmo erro.

F

Poderia me mostrar na pratica? Porque realmente não consigo solucionar.

[ ]`s
Fábio Heleno

F

Existe alguma maneira de tratar isto?

char List[]
iPos = 0
char cLetra = A

if&#40;Lista&#91;iPos&#93; == cLetra&#41;
&#123;
	System.out.println&#40;"Letra já existe!"&#41;;
&#125;

Estou verificando se posição 0 é igual a ‘A’, se não, como no caso está vazio, queria que ele continuasse, mais ele da erro, só avança se eu começar o array com algo dentro. Alguem poderia me ajudar???

[ ]`s
Fábio Heleno

Criado 13 de agosto de 2004
Ultima resposta 18 de ago. de 2004
Respostas 9
Participantes 2