Jump to content

Strings e vectores


Recommended Posts

Posted

Boas,

criei uma função que, recebendo uma matriz, uma string (de 3 caracteres), e um valor do teclado que irá corresponder ao numero da coluna onde serão inseridos os caracteres, tem por objetivo inserir uma string numa matriz de caracteres, de forma a que não existam espaços em branco entre eles. A matriz já pode ou não conter caracteres.

A função a que cheguei, apesar de ainda não fazer bem aquilo que quero, não provoca erros de compilação. Porém, o erro aparece aquando da execução. É algo estranho :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20

at columns22.colocaString(columns22.java:233)

at columns22.operacaoUm(columns22.java:124)

at columns22.main(columns22.java:22)

O código que desenvolvi foi o seguinte:


private static char[][] colocaString (char grelha[][], String s, Scanner teclado){

// le um valor para a coluna do teclado
int coluna = teclado.nextInt();

// numero de linhas da matriz
int linha = 20;

// ciclo for para percorrer as linhas da coluna respectiva

for(int i = 0; i < linha ; i++){

// condicao que verifica se o elemento seguinte e diferente de '_' e nesse caso substitui o elemento actual pela ultima posicao da string, e os dois anteriores pelas outras 2 posicoes. assegura ainda que existe espaco suficiente na coluna para a string completa

  if( grelha[(i + 1)][coluna] != '_' && grelha[i][coluna] != grelha[0][coluna]){

		  grelha[i][coluna]= colunaPermutada.charAt(2);
		  grelha[(i - 1)][coluna] = colunaPermutada.charAt(1);
		  grelha[(i - 2)][coluna] = colunaPermutada.charAt(0);

}


}

// devolve a grelha ja com a string inserida
return grelha;

}

Alguém me pode dar uma ajuda, é que não estou mesmo a conseguir..

Posted

Pois ele vai aceder a uma posição que não existe, mas a primeira posição do vector tem de ser a posição zero, dai a minha dúvida

Posted

a minha duvida é porque é que quando chamo a função no programa não dá qualquer erro de compilação, mas no entanto não a executa no decorrer do programa

Posted

o problema começa na linha correspondente ao if, segundo o erro..

como posso otimizar o código ? é que para mim faz sentido o que está lá escrito

Posted

sim, quer dizer, o código claramente está errado, caso contrário não daria erro, mas quando digo que faz sentido, estou-me a referir á maneira de pensar:

eu quero a coluna seja um valor entre 1 e 12 que eu vou introduzir, logo vai ficar fixo.

e quero que a linha seja percorrida até existir uma casa diferente de '_' (porque neste caso o caracter '_' corresponde á casa vazia).

a partir do momento em que é encontrada essa casa, a imediatamente anterior irá ser a ultima casa do vector.

Daí o :

if( grelha[(i + 1)][coluna] != '_'

a restante parte da condição serve para garantir que existem posições disponiveis suficientes para ser introduzida uma nova string de 3 caracteres.

Eu não sei se me estou a conseguir fazer entender, posso ter explicado de forma um pouco confusa, mas eu acho que estou a pensar bem, apenas a escrever mal

Posted

mas no caso da coluna não ter nada, o programa não iria fazer nada.

se não encontrou, não faz nada

Posted

para uma delas existe uma exceção mas não deixa de ser uma condição necessária..como posso modificá-la ? não estou mesmo a ver..

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.