Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FelipeUS

Problema nesse programa...

Recommended Posts

Estou tendo problemas com esse codigo, está dando esses erros....

 

C:\Documents and Settings\Instrutor\Desktop>javac *.java

C:\Documents and Settings\Instrutor\Desktop>java bellmanFord entrada.txt A saida.txt

1

4

4

AException in thread "main" java.lang.NumberFormatException: For input string: "

A"

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at bellmanFord.inicializaGrafo(bellmanFord.java:25)

at bellmanFord.bF(bellmanFord.java:52)

 

arquivo de entrada.txt

4

4

A,B,C,D.

A,B,3.

A,C,4.

B,C,5.

C,D,-2.

 

a letra "A" seria um certa origem passada... e o saida.txt eh onde ficará o resultado do menor caminho...

 

import java.io.*;public class bellmanFord { 	static int nVertices, nArestas, matriz[][],nlinha=1,posicao,d[],pred[];	static char vertices[];	static String linha="";	static String texto= "";	 	static int posicaoVertice(char v)	 {	   for(int i=0; i<nVertices; i++)	   {		   if(vertices[i] == v)		   {			 return i;   		   }	   }		return -1;	 }	  static void inicializaGrafo(String posicao)	  	{	  int p = Integer.parseInt(posicao);	  	  d = new int[nVertices];	  pred = new int[nVertices];	  	  	  for(int i=0;i<nVertices;i++)	  {		 d[i] = 999999;		 pred[i] = -9;		  	  }	d[p] = 0;  	}   static void relax(int u, int v,int peso)  {	  if(d[v] > d[u] + peso)	  {		  d[v] = d[u] + peso;		  pred[v] = u;	  }	   } 	static void bF(char vertices[], int m[][],String origem)	{		inicializaGrafo(origem);				for(int i =0; i < nVertices; i++)		{			for(int j = 0; j < nVertices; j++)			{				if(m[i][j]!=0)					relax(i,j,m[i][j]);			}		}	  	}    private static void MontaMatriz(String entrada1)  {		File entrada = new File(entrada1);							try {				FileReader ler = new FileReader(entrada);		BufferedReader lendo = new BufferedReader(ler);				linha = lendo.readLine();	   			  while(linha!= null)	  {		switch(nlinha)		{		case 1:   				   int espaco=linha.lastIndexOf(" ");			   	  String aux=linha;				  while(espaco!=-1){				System.out.println(aux.lastIndexOf(" "));																aux = aux.substring(0,espaco);				espaco=aux.lastIndexOf(" ");				}				 				  nVertices = Integer.parseInt(aux); 				  matriz = new int[nVertices][nVertices];				  vertices = new char[nVertices];				  System.out.println(nVertices);				  break;				case  2:  nArestas = Integer.parseInt(linha);				  System.out.println(nArestas);				  break;			 		case  3:  posicao = 0; //posicao dentro do arquivo				  char c = linha.charAt(posicao); //pega o caracter dentro do arquivo				  int posv = 0;//posicao dentro do vetor de char vertices				  				  while(c!='.')				  {					  if(c==',')					   {	 						posicao++;						c = linha.charAt(posicao);						 continue;					   }	 										   else					   {					   vertices[posv]= c;					   posv++;					   posicao++;					   c = linha.charAt(posicao);					   }														  				  }					  				 break;		  		default:   int pos = 4; //posicao dentro do arquivo;				   c = linha.charAt(pos);				   String peso="";				  									   					   while(c != '.')					   {						   c = linha.charAt(pos);						  if(c=='.') break;						   peso += c;						   pos++;						  					   }  						 matriz[posicaoVertice(linha.charAt(0))][posicaoVertice(linha.charAt(2))] = Integer.parseInt(peso);						pos++;						 						 											   					   					 		  }  //switch						  		 linha = lendo.readLine();		 nlinha++; 		} //while	  	  	  ler.close(); 	  lendo.close();	}	  catch (IOException e) 	  { 		e.printStackTrace(); 	  }  	}   		static void escreveNoArquivo(String saida,String or)	{  	  try	  {		FileWriter writer = new FileWriter(saida); 		PrintWriter output = new PrintWriter(writer);				String s = ImprimeArestas(or);				output.close();	  }	  catch (IOException e) 	  { 		e.printStackTrace(); 	  }	}		static String ImprimeArestas(String origem)	{		String arestas="";	for(int k=0; k<nVertices;k++)	 {					if(d[k]==999999)		{						arestas =vertices[k]+","+"+inf"+".";								}		else		 {						arestas = vertices[k]+","+d[k]+".";								 }		 if(pred[k]==-9)		 {			arestas = origem+","+arestas;	 	 }		 else		 {			while(pred[k]!=-9)			{				arestas = vertices[pred[k]]+","+arestas;				k=pred[k];		 	} 					}			  }	 return arestas;	}			public static void main(String[] args) 	{		// TODO Auto-generated method stub				MontaMatriz(args[0]);		System.out.print(args[1]);		bF(vertices,matriz,args[1]);		escreveNoArquivo(args[2],args[1]);	 	}	   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

você faz Ciencia da Computação?esse semestre terei Grafos e também vou ter que implementar alguns algoritimos... em fim...Vamos ao que intereça... você ja tentou acrescentar junto com o io oimport java.io.*;import java.swing.*;Acho que eh isso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo o que eu vi na sua linha args[1] é a string "entrada.txt" que na main você passa para o método bFbF(vertices,matriz,args[1]);Nesse método você passa para inicializaGrafoinicializaGrafo(origem);E nesse método você tenta passar a palavra "entrada.txt" para inteiro, o que vai dar um erro obviamente. Nem recomendo usar try catch, verifique novamente a lógica do seu programa porque tem alguma coisa errada

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.