Escolar Documentos
Profissional Documentos
Cultura Documentos
[code]import java.awt.;
import java.awt.event.;
import javax.swing.*;
{
//atributos
private final int someMuda = 25;
private final int tamanho = 23;
private int aondeX = 1;
private int aondeY = 1;
private int posX = 28;
private int posY = 28;
private char letra;
private boolean impriLetra = false;
private boolean reImpriLetra = false;
private char [][]gravaLetra = new char[10][10];
//construtor
public Jogo(){
super("Jogando");
showFrame();
}
//metodos
public void paint(Graphics g)
{
if(!impriLetra)
{
super.paint(g);
//desenha o jogo
g.setColor(Color.black);
//pinta os quadrados
g.setColor(Color.blue);
g.fillRect(posX, posY, 22, 22);
}
g.setColor(Color.black);
g.setFont(new Font("SansSerif", Font.BOLD, 15));
g.drawString(gravaLetra[i][j]+"",((i+1)*25)+8, ((j+1)*25+18));
}
reImpriLetra = false;
}
}
//Mostra o Frame
public void showFrame()
{
addKeyListener(this);
setSize(315, 400);
setVisible(true);
gravaLetra = inicializa(gravaLetra);
}
gravaLetra[aondeX-1][aondeY-1] = letra;
letra = ' ';
reImpriLetra = true;
if(e.getKeyCode()==39)
{
if(aondeX == 10)
{
posX = 28;
aondeX = 1;
}
else
{
posX+=25;
aondeX++;
}
}
if(e.getKeyCode()==37)
{
if(aondeX==1)
{
posX+=(25*9);
aondeX=10;
}
else
{
posX-=25;
aondeX--;
}
}
if(e.getKeyCode()==38)
{
if(aondeY==1)
{
aondeY = 10;
posY+=(25*9);
}
else
{
aondeY--;
posY-=25;
}
}
if(e.getKeyCode()==40)
{
if(aondeY==10)
{
posY=28;
aondeY=1;
}
else
{
posY+=25;
aondeY++;
}
}
if(gravaLetra[aondeX-1][aondeY-1]!=' ')
{
letra = gravaLetra[aondeX-1][aondeY-1];
gravaLetra[aondeX-1][aondeY-1] = ' ';
//System.err.println(letra+"");
}
repaint();
}
else
{
if(letra!=' ')
{
gravaLetra[aondeX-1][aondeY-1] = ' ';
impriLetra = true;
repaint();
}
impriLetra = true;
letra = Letra.retornaLetra(e.getKeyCode());
reImpriLetra = true;
repaint();
}
}
return a;
}
}[/code]
case 66:
return 'B';
case 67:
return 'C';
case 68:
return 'D';
case 69:
return 'E';
case 70:
return 'F';
case 71:
return 'G';
case 72:
return 'H';
case 73:
return 'I';
case 74:
return 'J';
case 75:
return 'K';
case 76:
return 'L';
case 77:
return 'M';
case 78:
return 'N';
case 79:
return 'O';
case 80:
return 'P';
case 81:
return 'Q';
case 82:
return 'R';
case 83:
return 'S';
case 84:
return 'T';
case 85:
return 'U';
case 86:
return 'V';
case 87:
return 'W';
case 88:
return 'X';
case 89:
return 'Y';
case 90:
return 'Z';
}
}[/code]
Seus problemas acabaram
http://fivedots.coe.psu.ac.th/~ad/jg/
Segue o código:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
coluna++;
}
}
br.close();
int i, j, k, n = 0, p = 0, t; //Contadores
System.out.println("RESULTADO:\n");
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
if (encontrada == 1){
break;
}else{
return;
}
}
}
//Depois da verificação ele diz se a palavra foi encontrada ou não, então passa para
a verificação da próxima palavra.
if (encontrada == 1){
System.out.println(" PALAVRA ENCONTRADA\n");
}else{
System.out.println(" PALAVRA NAO ENCONTRADA\n");
}
}
}
11
1. Use o tipo boolean! Ele é seu amigo e serve para ajudar! Não
utilize int com 0 e 1 para representar valores verdadeiro/falso ou sim/não.
2. Aprenda a identar o código. Só de ver a forma como você posicionou os
blocos else, me dá a entender que você os colocou no lugar errado e com
isso, você acaba entendendo errado o seu próprio código.
3. Isso daqui, que aparece repetido nove vezes no seu código NÃO faz o que
você quer:
4. if (encontrada == 1) {
5. break;
6. } else {
7. return;
8. }
Em especial, o return dentro do método main faz o seu programa abortar
imediatamente, não importando se ele encontrou ou não a palavra. No
caso do seu programa, você não deveria usar return em lugar nenhum.
9. Você não verifica os limites da matriz antes de acessar os seus elementos,
e como resultado terá alguns IndexOutOfBoundsException. Por exemplo,
nesta linha:
10. if (palavra[k][1] == matriz[i - 1][j]) //Se a segunda letra for encontrada
acima (Norte)
Adivinha o que vai acontecer se i tiver o valor 0? O correto é verificar isso
antes de tentar acessar o índice:
if (tabuleiro[posicaoY][posicaoX] == palavra.charAt(0)) {
class TabuleiroNavegavel {
public static boolean existePalavra(String palavra, char[][] tabuleiro,
Direcao direcao, int posicaoInicialY, int posicalInicialX) {
StringBuilder palavraEncontrada = new StringBuilder();
int qtdLetrasLidas = 0;
interface NavegadorLetras {
boolean temProxima();
char proxima();
}
interface LetrasNavegaveis {
NavegadorLetras navegador(final char[][] tabuleiro,
final int posicaoInicialY, final int posicalInicialX);
}
enum Direcao {
LESTE(new Leste()),
SUDESTE(new Sudeste()),
SUL(new Sul()),
NORDESTE(new Nordeste());
Direcao(LetrasNavegaveis letrasNavegaveis) {
this.letrasNavegaveis = letrasNavegaveis;
}
public NavegadorLetras letras(char[][] tabuleiro,
int posicaoInicialY, int posicalInicialX){
return letrasNavegaveis.navegador(tabuleiro, posicaoInicialY, posicalInicialX);
}
}
@Test
public void cacaPalavras() {
assertTrue(CacaPalavras.palavraEncontrada(tabuleiro, "RUIVA"));
assertTrue(CacaPalavras.palavraEncontrada(tabuleiro, "RAIVA"));
assertTrue(CacaPalavras.palavraEncontrada(tabuleiro, "LUIZA"));
assertTrue(CacaPalavras.palavraEncontrada(tabuleiro, "CAIXA"));
assertFalse(CacaPalavras.palavraEncontrada(tabuleiro, "INEXISTENTE"));
}
Você pode envolver este código com a sua lógica de ler o tabuleiro de um arquivo e
solicitar uma lista de palavras do usuário :-)
Mas para implementar mais padrões é muito simples. Você não precisa inserir código
no meio de um grande e complexo método nem reprogramar o fluxo do programa. Ao
invés, você define um nova direção de leitura na enumeração e declara uma classe
especializada em ler nesta direção.
Se você quiser por exemplo implementar agora a direção sudoeste de leitura, basta
declarar a seguinte classe:
SUDOESTE(new Sudoeste());
Agora, no teste abaixo, a palavra "Ruiva" será encontrada:
@Test
public void sudoeste() {
char[][] tabuleiro = new char[][] {
{' ',' ',' ',' ','R'},
{' ',' ',' ','U',' '},
{' ',' ','I',' ',' '},
{' ','V',' ',' ',' '},
{'A',' ',' ',' ',' '}};
assertTrue(CacaPalavras.palavraEncontrada(tabuleiro, "RUIVA"));
}
E pronto :-)
Conclusão
Eu e muitos dos nossos colegas consideram este código bastante simples mas eu
entendo que talvez você não o compreenda completamente ainda.
Interface
Enumeração.
Extensão de enumeração: eu adicionei um atributo a cada item da
enumeração, que é o objeto especializado em percorrer o tabuleiro
naquela direção.
E apesar de eu não considerar quantidade total de linhas muito importante, eu
observo que embora meu código funcione ele tem ainda menos linhas que o código
original da pergunta.