Guest dcarou Posted November 29, 2012 at 04:01 PM Report #485112 Posted November 29, 2012 at 04:01 PM 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..
HappyHippyHippo Posted November 29, 2012 at 04:32 PM Report #485121 Posted November 29, 2012 at 04:32 PM se i vai de 0 a linha - 1, que valor estas a aceder quando i = linha - 1: if( grelha[(i + 1)][coluna] IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 04:56 PM Report #485134 Posted November 29, 2012 at 04:56 PM 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
HappyHippyHippo Posted November 29, 2012 at 05:14 PM Report #485138 Posted November 29, 2012 at 05:14 PM a primeira posição é a posição 0, o que não percebo é a tua dúvida ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 05:26 PM Report #485141 Posted November 29, 2012 at 05:26 PM 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
HappyHippyHippo Posted November 29, 2012 at 05:29 PM Report #485143 Posted November 29, 2012 at 05:29 PM porque não é um erro de sintaxe, logo o compilador come. é um erro de semântica o que faz estoirar o programa em run-time IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 05:31 PM Report #485145 Posted November 29, 2012 at 05:31 PM 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
HappyHippyHippo Posted November 29, 2012 at 05:45 PM Report #485155 Posted November 29, 2012 at 05:45 PM se i vai de 0 a linha - 1, que valor estas a aceder quando i = linha - 1: if( grelha[(i + 1)][coluna] Pois ele vai aceder a uma posição que não existe é que para mim faz sentido o que está lá escrito ... a sério ?? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 06:09 PM Report #485159 Posted November 29, 2012 at 06:09 PM 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
HappyHippyHippo Posted November 29, 2012 at 06:19 PM Report #485161 Posted November 29, 2012 at 06:19 PM terás sempre de considerar que se a coluna não tiver nada, nunca irás encontrar o que pretendes. logo, terás de ter em conta esse caso IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 06:46 PM Report #485166 Posted November 29, 2012 at 06:46 PM mas no caso da coluna não ter nada, o programa não iria fazer nada. se não encontrou, não faz nada
HappyHippyHippo Posted November 29, 2012 at 06:53 PM Report #485168 Posted November 29, 2012 at 06:53 PM não interessa o que queres que o programa faça, o que interessa é o que dizes (programes) o que ele faça. por muito que o digas, enquanto não o programares, não interessa ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 07:00 PM Report #485170 Posted November 29, 2012 at 07:00 PM claro 🙂 alguma dica para resolver o problema ?
HappyHippyHippo Posted November 29, 2012 at 07:07 PM Report #485172 Posted November 29, 2012 at 07:07 PM não testes aquilo que não pode ser testado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 07:29 PM Report #485176 Posted November 29, 2012 at 07:29 PM oh mas das condições que testei, são todas necessárias
HappyHippyHippo Posted November 29, 2012 at 07:30 PM Report #485177 Posted November 29, 2012 at 07:30 PM nem todas, visto que 1 delas dá excepção ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest dcarou Posted November 29, 2012 at 08:01 PM Report #485179 Posted November 29, 2012 at 08:01 PM 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..
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now