Formatação do texto em arquivo de saida

3 respostas
O

Olá amigos, gostaria da ajuda de vocês para resolver um problema do curso…

preciso ler um arquivo: destino.txt

Rio de Janeiro/Guarapari/500
Rio de Janeiro/Sao Paulo/600
Guarapari/Vitoria/50
Rio de Janeiro/Vitoria/550
Vitoria/Sao Paulo/750

e salvar na saida , algo com a seguinte ordem:

Rio de Janeiro:
Guarapari 500km
Sao Paulo 600km
Vitoria 550km
MAIS PERTO Guarapari
MAIS LONGE Sao Paulo

Guarapari:
Rio de Janeiro 500km
Vitoria 50km
MAIS PERTO Vitoria
MAIS LONGE Rio de Janeiro

Porém no arquivo de texto fica tudo na mesma linha…
Alguém poderia me dizer o que estou fazendo de errado…Já olhei diversas vezes os métodos toString() , porém ainda não consegui resolver…
abaixo segue o código:

import java.util.*;
import java.io.*;

class Cidade{ //classe cidade e variaveis de instancia...
	
	String vizinhanca;
	int custo;
	Cidade prox;
	
	Cidade(String viz,int cust){ // construtor...
		vizinhanca=viz;
		custo=cust;
		prox=null;
	}
	
	public String toString(){  //provavel local do erro...
		String s=vizinhanca+"\t"+custo+" Custo em reais\n";
		return s;
	}
	
}

class No{ // classe no e variaveis de instancia...
	
	String nome;
	String maior,menor;
	int maior_custo,menor_custo;
	No prox;
	Cidade prim;
	
	No(String name){// construtor...
		nome=name;
		maior=" ";
		menor=" ";
		maior_custo=menor_custo=0;
		prox=null;
		prim=null;
	}
	
	void insere_cidade(String vizinhanca,int custo){
		Cidade nova= new Cidade(vizinhanca,custo);
		if (prim==null) 
			{prim= nova;}
		else{
			Cidade p=prim;
			while(p.prox!=null) {
				p=p.prox;
			}
			p.prox=nova;
		}
		if (maior_custo==0){
			maior=menor=vizinhanca;
			maior_custo=menor_custo=custo;
			
		}
		else{
			if(maior_custo<custo){
				maior=vizinhanca;
				maior_custo=custo;
			}
			else if(menor_custo>custo){
				menor=vizinhanca;
				menor_custo=custo;
			}
		}
	}
	
	public String toString(){ //provavel local do erro...
		String t="\n";
		String s;
		s=t+nome+": \n";
		Cidade p=prim;
		while(p != null){
			s+=p.toString();
			p=p.prox;
		}
		s=s+"Menor custo"+"\t"+menor+"\n";
		s=s+"Maior custo"+"\t"+maior+"\n";
		return s;
	}
	
}

class Lista{
	
	No prim;
	Lista(){
		prim=null;
	}
	
	No busca(String nome){
		No p=prim;
		while((p!=null) &&(!(nome.equals(p.nome)))){
			p=p.prox;
			
		}
		return p;
	}
	
	void insere(String nome,String vizinhanca,int custo){
		No p=busca(nome);
		if(p==null){
			p=new No(nome);
			if(prim==null){
				prim=p;
			}
			else{
				No q=prim;
				while(q.prox != null){
					q=q.prox;
				}
				q.prox=p;
			}
		}
		p.insere_cidade(vizinhanca, custo);
	}
	public String toString(){
		String s=" ";
		No p=prim;
		while(p!=null){
			s+=p.toString();
			p=p.prox;
		}
		return s;
	}
}


public class Questao {

	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		try{
		BufferedReader in;
		in = new BufferedReader(new FileReader("destino.txt"));
		String s=null;
		try{
			Lista l=new Lista();
			String vs[];
			while((s=in.readLine())!=null){
				vs=s.split("/");
				l.insere(vs[0],vs[1], Integer.parseInt(vs[2]));
				l.insere(vs[1],vs[0], Integer.parseInt(vs[2]));
			}
			in.close();
			System.out.println("Leitura efetuada com sucesso...\n");
			
			BufferedWriter out;
			out=new BufferedWriter(new FileWriter("Saida-"+"destino.txt"));
			out.write(l.toString());
			out.close();
			
			System.out.println("Gravação efetuada com sucesso\nO nome do novo arquivo gerado é : Saida-destino.txt");
			
		}
		catch(Exception e){
			System.out.println("Ocorreu um erro na escrita...");
			}	
		}
		catch(Exception e){
			System.out.println("Ocorreu um erro na leitura, destino ou nome do arquivo invalidos!!");
			
		}
	}

}

Obrigado a quem puder ajudar…

3 Respostas

V

Use um PrintWriter para escrever na saída.

Lá tem todos os métodos do System.out, inclusive o println e printf.

O

O problema é que a questão pede que seja usado o toString() para imprimir( retornar) as strings…

E

Imprimir != retornar

Imprimir pulando linhas - println (como foi ensinado a usar System.out, e como out é um PrintWriter, então você pode usar PrintWriter. Não fique com frescura. )

Criado 23 de outubro de 2012
Ultima resposta 25 de out. de 2012
Respostas 3
Participantes 3