Problema: Anagrama salvo em arquivo TXT

6 respostas
R

Olá Pessoal, Eu estou fazendo um trabalho da Faculdade e estou encontrando algumas dificuldades, preciso criar um anagrama e este anagrama salvar a variação de letras em um arquivo TXT, e que possa ser lido após salvo para futuras comparações. O anagrama está pronto, vou postar pra vocês darem uma olhada e me dizerem o que preciso implementar para que ele salve o resultado em um TXT.

import javax.swing.JOptionPane;

public class Anagrama {

	public static void main(String[] args) {

		String palavra = Digite_a_palavra();
		char vetor[];

		/**
		 * metodo que retira todos os espaços do inicio, meio e fim das palavras
		 * digitadas
		 */
		palavra = Retira_Espaco(palavra);

		vetor = new char[palavra.length()];

		/**
		 * metodo que armazena a palavra em vetor
		 */
		Quebra_Palavra(palavra, vetor);

		/**
		 * metodo que cria o anagrama
		 */
		Calcula_Anagrama(vetor, 0);

		/**
		 * finaliza programa
		 */
		System.exit(0);
	}// fim main()

	/**
	 * Este metodo pede ao usuario para entrar com uma palavra
	 * 
	 * @return palavra
	 */
	private static String Digite_a_palavra() {
		String palavra = "";
		while (palavra.length() <= 2) {
			palavra = JOptionPane.showInputDialog(null,
					"Digite uma palavra de no minimo 2 caracteres",
					"Calculando Anagrama", JOptionPane.INFORMATION_MESSAGE);
		}
		return palavra;
                   
                
	}// fim metodo Digite_a_palavra()

	/**
	 * Este metodo mostra a palavra. A palavra é armazenada em um vetor para
	 * ficar mais facil o manuseio
	 * 
	 * @param vetor
	 */
	private static void Mostra(char[] vetor) {
		for (int i = 0; i < vetor.length; i++) {
			System.out.print(vetor[i] + " ");
		}// for
		System.out.println("");
	}// fim metodo Mostra()

	/**
	 * Este metodo recebe uma palavra e remove todos os espaços entre, durante e
	 * no final de qualquer palavra.
	 * 
	 * @param palavra
	 * @return palavra_sem_espaços
	 */
	private static String Retira_Espaco(String palavra) {
		String alterada = "", interna = (palavra).trim();
		char c;

		for (int i = 0; i < interna.length(); i++) {
			c = interna.charAt(i);
			if (Character.isLetterOrDigit(c)) {
				alterada += c;
			}// if
		}// for

		return alterada;
	}// fim metodo Retira_Espaco()

	/**
	 * Este metodo recebe o vetor contendo a palavra e mostra para o usuario
	 * todas as possibilidades de anagrama com esta palavra.
	 * 
	 * @param vetor
	 */
	private static void Calcula_Anagrama(char vetor[], int k) {
		int i;
		if (k == vetor.length - 1)
			Mostra(vetor);
		else {
			Calcula_Anagrama(vetor, k + 1);
			i = k + 1;
			while (i < vetor.length) {
				Troca_Posicao(vetor, k, i);
				Calcula_Anagrama(vetor, k + 1);
				Troca_Posicao(vetor, k, i);
				i = i + 1;
			}
		}
	}// fim metodo Calcula_Anagrama()

	/**
	 * Este metodo efetua a troca das posições desejadas
	 * 
	 * @param vetor
	 * @param i
	 * @param k
	 */
	private static void Troca_Posicao(char[] vetor, int k, int i) {
		char aux;
		aux = vetor[i];
		vetor[i] = vetor[k];
		vetor[k] = aux;
	}// fim metodo Troca_Posicao()

	/**
	 * Este metodo recebe a palavra e um vetor vazio e retorna o vetor contendo
	 * a palavra
	 * 
	 * @param palavra
	 * @param vetor
	 */
	private static void Quebra_Palavra(String palavra, char vetor[]) {
		for (int i = 0; i < vetor.length; i++) {
			vetor[i] = palavra.charAt(i);
		}// for
	}// fim metodo Quebra_Palavra()
}// fim class

Obrigado pela ajuda

6 Respostas

felipe_gdr

Use as classes do pacote java.io

um exemplo de codigo seria esse:

try{
    // criar arquivo
    FileWriter fstream = new FileWriter("anagrama.txt");
    BufferedWriter out = new BufferedWriter(fstream);
    // passe sua string como parametro
    out.write(anagrama);
    // fechar o outputstream
    out.close();
    } catch (Exception e){//pega exception
          System.err.println("Erro: " + e.getMessage());
    }
}

abs!

R

Onde eu colocaria esse Try?

Passar a String que você diz é usar a String palavra ou o vetor ?

Abraço e obrigado pela resposta, se você puder ser mais especificio no código eu agradeço!

fico no aguardo

felipe_gdr

você poderia criar um novo método que será encarregado de criar o arquivo texto e escrever a palavra nesse arquivo. Depois é só chamar esse método de dentro do seu main.

por exemplo:

private void criaArquivo(String textoOut) {
    try{  
    // criar arquivo  
    FileWriter fstream = new FileWriter("anagrama.txt");  
    BufferedWriter out = new BufferedWriter(fstream);  
    // passe sua string como parametro  
    out.write(textoOut);  
    // fechar o outputstream  
    out.close();  
    } catch (Exception e){//pega exception  
        System.err.println("Erro: " + e.getMessage());  
    }  
}

A string que você passar para esse método será incluída no arquivo texto.
Como seu anagrama está contido num array (vetor) você teria que converter esse array em string (o contrário do que foi feito no método QuebraPalavra).

R

Amigo, obrigado pela sua boa vontade mas eu não estou conseguindo fazer, você poderia copiar a classe Anagrama que eu postei com esta função de salvar em um arquivo para mim? Pois estou enrolado porque isso depois vai ter que ser feito dentro de um Cliente-Servidor.

To em um enrascada! Obrigado pela atenção fera!

felipe_gdr

Tentei fazer as modificações necessárias. Não fiz nenhum teste, então pode ser que haja erros, é seu papel de corrigí-los :wink:
Mudei 2 métodos - Calcula_Anagrama e Mostra - e criei o método SalvaArquivo. Talvez voce tenha que mudar outros métodos também, não sei.

O “segredo” é ir construindo uma string que você quer que seja salva no txt (textoOut) e depois passar essa string pro método SalvaArquivo().

Espero que esteja mais claro agora.

abs.

public class Anagrama {  
  
    public static void main(String[] args) {  
  
        String palavra = Digite_a_palavra();  
        char vetor[];  

        palavra = Retira_Espaco(palavra);  
  
        vetor = new char[palavra.length()];  

        Quebra_Palavra(palavra, vetor);  

        String textoOut = Calcula_Anagrama(vetor, 0);  

        SalvaArquivo(textoOut);

        System.exit(0);  
    }

    private static String Digite_a_palavra() {  
        ...
    }

    private static String ConstroiTexto(char[] vetor) {  
        String texto = "";
        for (int i = 0; i < vetor.length; i++) {  
            texto += vetor[i];
        }  
        texto += "/n";
        return texto;
    }

    private static void SalvaArguivo(String textoOut) {

    try{  
    // criar arquivo  
    FileWriter fstream = new FileWriter("anagrama.txt");  
    BufferedWriter out = new BufferedWriter(fstream);  
    // passe sua string como parametro  
    out.write(textoOut);  
    // fechar o outputstream  
    out.close();  
    } catch (Exception e){//pega exception  
          System.err.println("Erro: " + e.getMessage());  
    }  
    } 

    }

    private static String Retira_Espaco(String palavra) {  
        ....
    }

    private static String Calcula_Anagrama(char vetor[], int k) {  
        int i;  
        String resultado = "";
        if (k == vetor.length - 1)  
            resultado += ConstroiTexto(vetor);  
        else {  
            Calcula_Anagrama(vetor, k + 1);  
            i = k + 1;  
            while (i < vetor.length) {  
                Troca_Posicao(vetor, k, i);  
                Calcula_Anagrama(vetor, k + 1);  
                Troca_Posicao(vetor, k, i);  
                i = i + 1;  
            }  
        }  
        return resultado;
    }// fim metodo Calcula_Anagrama()  

    private static void Troca_Posicao(char[] vetor, int k, int i) {  
        ....
    }

    private static void Quebra_Palavra(String palavra, char vetor[]) {  
        for (int i = 0; i < vetor.length; i++) {  
            vetor[i] = palavra.charAt(i);  
        }
    }

    private static void Quebra_Palavra(String palavra, char vetor[]) {  
        for (int i = 0; i < vetor.length; i++) {  
            vetor[i] = palavra.charAt(i);  
        }
    }
}
R

Muito obrigado cara, agora sim ficou claro :smiley:

Criado 16 de novembro de 2009
Ultima resposta 17 de nov. de 2009
Respostas 6
Participantes 2