Hola a todos, primera vez que programo en Java y bueno... se imaginan
ya tuve sorpresas con las confusion de tipos primitivos y objetos, pero bueno.
Estoy trabajando con el GraphBench (aplicacion educativa para simular grafos)
Ya no tengo errores, solo "Notas" supongo advertencias sobre -Xlint y unsafe operations. Busque en la red, hablan del uso de generalidades(ciones?) y he tratado de corregir mi codigo pero la aplicación no me funciona.
Tengo duda con los iteradores, y si estoy enviando bien los params en el metodo putUserData. Debo resolver esto usando el API de este software educativo.
Código:
import ch.ethz.graphbench.toolbox.*;
import java.util.Iterator;
import java.lang.String;
import javax.swing.*;
public class Grado_separacion extends GraphAlgorithm{
public void executeAlgorithm(){ // codigo que ejecuta el software
String origen = "0";
String destino = "5";
boolean encontrado = false;
Iterator<Edge> it; // POR AQUI ANDA EL ASUNTO
Edge edg = null;
Integer gradosep = new Integer(0);
Integer respuesta = new Integer(0);
int indiceOrigen=0;
if ( !origen.equals(destino) ) // por ahi me dijeron que no era con == ...
{
for(int i = 0; i < graph.getVertexCount(); i++) {
if ( graph.getVertex(i).getName().equals(origen) ); {
graph.getVertex(i).setVertexState(Vertex.ACTIVE_STATE);
graph.getVertex(i).putUserData("grado", new Integer(0));
indiceOrigen=graph.getVertex(i).getIndex();
graph.getVertex(i).setVertexState(Vertex.QUEUED_STATE);
}
}
for(int i = indiceOrigen; i < graph.getVertexCount(); i++) {
if ( graph.getVertex(i).getVertexState() == Vertex.QUEUED_STATE )
{
graph.getVertex(i).setVertexState(Vertex.PROCESSED_STATE);
// visitado
// CODIGO DUDOSO
// iterador a las aristas adyacentes al vertice
it = graph.getVertex(i).getEdgeIterator();
gradosep=(Integer)graph.getVertex(i).getUserData("grado");
while (it.hasNext())
{
edg = (Edge) it.next(); // CODIGO DUDOSO
edg.getEndVertex().setVertexState(Vertex.QUEUED_STATE);
edg.getEndVertex().putUserData("grado",
new Integer(gradosep.intValue()+1));
if ( edg.getEndVertex().getName() == destino )
{
encontrado = true;
edg.getEndVertex().setVertexState(Vertex.PROCESSED_STATE);
respuesta = (Integer) edg.getEndVertex().getUserData("grado");
break;
}
}
}
if (encontrado) break;
}
}
}
JOptionPane.showMessageDialog(null,Integer.toString(respuesta),"Error",JOptionPane.INFORMATION_MESSAGE);
}
API JAVA
de la clase vertex:
public java.util.Iterator getEdgeIterator()
Retorna un iterador a todas las aristas adyacentes al vertice.
public void putUserData(java.lang.Object key, java.lang.Object value)
Mapea Value al objeto Key.
Solo esto incluyo porque con he probado separadamente los demás metodos y me funcionan bien. Sin embargo,
el API completo esta aqui
Gracias por sus observaciones.