Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    20

    Implementazione di Grafi

    Sto implementando un grafo mediante liste di incidenza, ma nel testare la classe ILDirectedGraph,

    codice:
    public class Prova_ILDirectedGraph {
      public static void main(String[] args) {
        ILDirectedGraph ildg =new ILDirectedGraph();
    il compilatore mi da questo errore:
    codice:
    java.lang.ClassFormatError: Grafi/ILDirectedGraph (Code attribute is absent in method that is not abstract or native)
    
    	at java.lang.ClassLoader.defineClass0(Native Method)
    
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
    
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
    
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
    
    	at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
    
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
    
    	at java.security.AccessController.doPrivileged(Native Method)
    
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
    
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
    
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    
    	at Grafi.Prova_ILDirectedGraph.main(Prova_ILDirectedGraph.java:5)
    
    Exception in thread "main"


    Perchè?

    Questa è la mia classe ILDirectedGraph:
    codice:
    package Grafi;
    
    public class ILDirectedGraph implements DirectedGraph {
    
      NodeList _vertices;
      NodeList _edges;
    
      public ILDirectedGraph() {
        _vertices = new NodeList();
        _edges = new NodeList();
      }
    
      public DEdge checkEdge(Edge p) {
        try {
          DEdge v = (DEdge) p;
          if (v.element() == null || v.getOrigin() == null || v.getDestination() == null)
            System.out.println("Rilevato arco non valido");
          return v;
        }
        catch (ClassCastException cce) {
          throw new InvalidPositionException("Rilevato arco non valido");
        }
      }
    
      public ILVertex checkVertex(Vertex p) {
        try {
          ILVertex v = (ILVertex) p;
          if (v.isNull() || v.element() == null)
            System.out.println("Rilevato vertice non valido");
          return v;
        }
        catch (ClassCastException cce) {
          throw new InvalidPositionException("Rilevato vertice non valido");
        }
      }
    
      public int size() {
        return _vertices.size() + _edges.size();
      }
    
      public boolean isEmpty() {
        return (size() < 0);
      }
    
      public int numVertices() {
        return _vertices.size();
      }
    
      public int numEdges() {
        return _edges.size();
      }
    
      public VertexIterator vertices() {
        return new VertexIteratorAdapter(_vertices.elements());
      }
    
      public EdgeIterator edges() {
        return new EdgeIteratorAdapter(_edges.elements());
      }
    
      public Vertex aVertex() {
        return (ILVertex) _vertices.first();
      }
    
      //restituisce un arco arbitrario del grafo
      public Edge anEdge() {
        return (DEdge) _edges.first();
      }
    
      public void reverseDirection(Edge e) {
        DEdge arcoD = checkEdge(e);
        arcoD.reverseDirection();
      }
    
    //Setta la direzione dell'arco e uscente da v
      public void setDirectionFrom(Edge e, Vertex v) {
        DEdge arcoD = checkEdge(e);
        ILVertex vertice = checkVertex(v);
        arcoD.setDirectionFrom(vertice);
      }
    
    //Setta la direzione dell'arco e entrante in v
      public void setDirectionTo(Edge e, Vertex v) {
        ILVertex iv = (ILVertex) v;
        DEdge arcoD = checkEdge(e);
        arcoD.setDirectionTo(v);
      }
    
      //Inserisce un vertice isolato nel grafo che contiene element
      public Vertex insertVertex(Object element) {
        Object obj = element;
        return ( (Vertex) _vertices.insertLast(obj));
      }
    
      //Inserisce un arco contenente element tra i vertici v1 e v2
      //Se il grafo è orientato v1 è l'origine e v2 è la destinazione
      public Edge insertEdge(Vertex v1, Vertex v2, Object element) {
        Vertex Vorig = v1;
        Vertex Vdest = v2;
        Object elem = element;
        DEdge arcoD = new DEdge(elem, v1, v2);
        return ( (Edge) _edges.insertLast(arcoD));
      }
    
      //Cancella il vertice v e tutti gli archi incidenti su esso
      public void removeVertex(Vertex v) {
        ILVertex vertice = checkVertex(v);
        _vertices.remove(vertice);
        EdgeIterator iter = inIncidentEdges(vertice);
        while (iter.hasNext()) {
          DEdge De = (DEdge) iter.nextEdge();
          _edges.remove(De);
        }
      }
    
      //Cancella l'arco e
      public void removeEdge(Edge e) {
        DEdge De = checkEdge(e);
        _edges.remove(De);
      }
    
      //Cancella l'arco tra i nodi v1 e v2
      public void removeEdge(Vertex v1, Vertex v2) {
        v1 = checkVertex(v1);
        v2 = checkVertex(v2);
        EdgeIteratorAdapter Ei = (EdgeIteratorAdapter) edges();
        while (Ei.hasNext()) {
          DEdge edge = (DEdge) Ei.nextEdge();
          if (edge.getOrigin() == v1 || edge.getDestination() == v2)
            _edges.remove(edge);
        }
      }
    
      //Sostituisce l'elemento in v con x
      public void replace(Vertex v, Object x) {
        ILVertex vertice = checkVertex(v);
        Object elem = x;
        _vertices.replaceElement(vertice, elem);
      }
    
      //Sostituisce l'elemento in e con x
      public void replace(Edge e, Object x) {
        DEdge De = checkEdge(e);
        Object elem = x;
        _edges.replaceElement(De, elem);
      }
    
      //Restituisce il vertice origine di e
      public Vertex origin(Edge e) {
        DEdge De = checkEdge(e);
        return (De.getOrigin());
      }
    
      //Restituisce il vertice destinazione di e
      public Vertex destination(Edge e) {
        DEdge De = checkEdge(e);
        return (De.getDestination());
      }
    
      //Restituisce il numero di archi entranti in v
      public int inDegree(Vertex v) {
        ILVertex vertice = checkVertex(v);
        return (vertice.inDegree());
      }
    
      //Restituisce il numero di archi uscenti da v
      public int outDegree(Vertex v) {
        ILVertex vertice = checkVertex(v);
        return (vertice.outDegree());
      }
    
      //Restituisce un iteratore sugli archi uscenti da v
      public EdgeIterator outIncidentEdges(Vertex v) {
        ILVertex vertice = checkVertex(v);
        EdgeIteratorAdapter Iter = (EdgeIteratorAdapter) edges();
        Edge it[] = new Edge[_edges.size()];
        int i = 0;
        while (Iter.hasNext()) {
          DEdge De = (DEdge) Iter.nextEdge();
          if (De.getOrigin() == vertice) {
            it[i] = De;
            i++;
          }
        }
        ArrayPositionIterator itera = new ArrayPositionIterator(it);
        return new EdgeIteratorAdapter(itera);
      }
    
      //Restituisce un iteratore sugli archi entranti in v
      public EdgeIterator inIncidentEdges(Vertex v) {
        ILVertex vertice = checkVertex(v);
        EdgeIteratorAdapter Iter = (EdgeIteratorAdapter) edges();
        Edge it[] = new Edge[_edges.size()];
        int i = 0;
        while (Iter.hasNext()) {
          DEdge De = (DEdge) Iter.nextEdge();
          if (De.getDestination() == vertice) {
            it[i] = De;
            i++;
          }
        }
        ArrayPositionIterator iterator = new ArrayPositionIterator(it);
        return new EdgeIteratorAdapter(iterator);
      }
    
      //Restituisce un iteratore sui vertici adiacenti a v tramite archi uscenti
      public VertexIterator outAdjacentVertices(Vertex v) {
        ILVertex vertice = checkVertex(v);
        EdgeIteratorAdapter iter = (EdgeIteratorAdapter) edges();
        Vertex it[] = new Vertex[_edges.size()];
        int i = 0;
        while (iter.hasNext()) {
          DEdge De = (DEdge) iter.nextEdge();
          if (De.getOrigin() == vertice) {
            it[i] = vertice;
            i++;
          }
        }
        ArrayPositionIterator iterator = new ArrayPositionIterator(it);
        return new VertexIteratorAdapter(iterator);
      }
    
      //Restituisce un iteratore sui vertici adiacenti a v tramite archi entranti
      public VertexIterator inAdjacentVertices(Vertex v);
    
      //restituisce true se v1 e v2 sono adiacenti
      public boolean areAdjacent(Vertex v1, Vertex v2) {
        ILVertex ve1 = checkVertex(v1);
        ILVertex ve2 = checkVertex(v2);
        EdgeIteratorAdapter iter = (EdgeIteratorAdapter) edges();
        while (iter.hasNext()) {
          DEdge De = (DEdge) iter.nextEdge();
          if ( (De.getOrigin() == ve1 && De.getDestination() == ve2) ||
              (De.getOrigin() == ve2 && De.getDestination() == ve1))
            break;
          else
            return false;
        }
        return true;
      }
    
      //restituisce il grado del vertice v
      public int degree(Vertex v) {
        ILVertex vertice = checkVertex(v);
        return (vertice.inDegree() + vertice.outDegree());
      }
    
      //restituisce un iteratore sui vertici adiacenti al vertice v
      public VertexIterator adjacentVertices(Vertex v) {
        ILVertex vertice = checkVertex(v);
        VertexIteratorAdapter Iv = (VertexIteratorAdapter) vertices();
        Vertex it[] = new Vertex[_vertices.size()];
        int i = 0;
        while (Iv.hasNext()) {
          ILVertex vi = (ILVertex) Iv.nextVertex();
          if (areAdjacent(vertice, vi)) {
            it[i] = v;
            i++;
          }
        }
        ArrayPositionIterator IterV = new ArrayPositionIterator(it);
        return new VertexIteratorAdapter(IterV);
      }
    
      //restituisce un array di grandezza due contenente i vertici incidenti su e
      public Vertex[] endVertices(Edge e) {
        Vertex vertici[] = new Vertex[2];
        DEdge De = checkEdge(e);
        vertici[0] = De.getOrigin();
        vertici[1] = De.getDestination();
        return vertici;
      }
    
      //restituisce un iteratore sugli archi adiacenti al vertice v
      public EdgeIterator incidentEdges(Vertex v) {
        ILVertex vertice = checkVertex(v);
        EdgeIteratorAdapter Iter = (EdgeIteratorAdapter) edges();
        Edge it[] = new Edge[_edges.size()];
        int i = 0;
        while (Iter.hasNext()) {
          DEdge De = (DEdge) Iter.nextEdge();
          if (De.getOrigin() == vertice || De.getDestination() == vertice) {
            it[i] = De;
            i++;
          }
        }
        ArrayPositionIterator iterator = new ArrayPositionIterator(it);
        return new EdgeIteratorAdapter(iterator);
      }
    
      //restituisce l'estremità di e distinta da v (l'altro vertice incidente su e)
      public Vertex opposite(Vertex v, Edge e) {
        ILVertex vertice = checkVertex(v);
        DEdge De = checkEdge(e);
        if (De.getOrigin() == vertice)
          return De.getDestination();
        else
          return De.getOrigin();
      }
    
      // Sostituisce l'elemento in posizione p con element
      // Restituisce l'elemento sostituito
      public Object replaceElement(Position p, Object element) throws
          InvalidPositionException {
        Object elem = element;
        if ( (_edges.replaceElement(p, elem) == null) ||
            (_vertices.replaceElement(p, elem) == null))
          throw new InvalidPositionException("non è una posizione");
        else if (_edges.replaceElement(p, elem) != null)
          return _edges.replaceElement(p, elem);
        return (_vertices.replaceElement(p, elem));
      }
    
      // Scambia gli elementi memorizzati nelle posizioni a e b
      public void swapElements(Position a, Position b) throws
          InvalidPositionException {
        Position p1 = a;
        Position p2 = b;
        try {
          _edges.checkPosition(p1);
          _vertices.checkPosition(p2);
          _edges.swapElements(p1, p2);
          _vertices.swapElements(p1, p2);
        }
        catch (ClassCastException cce) {
          throw new InvalidPositionException("Rilevato arco non valido");
        }
      }
    
      public Iterator elements() {
        int i=0;
        Object Elem[]= new Object[size()];
        VertexIterator vertici = vertices();
        EdgeIterator edge = edges();
        while(vertici.hasNext()){
          Elem[i]=vertici.nextVertex();
        }
        while(edge.hasNext()){
          Elem[i]=edge.nextEdge();
        }
        return (new ArrayObjectIterator(Elem));
      }
    
      public Iterator positions() {
        int i=0;
        Position Elem[]= new Position[size()];
        VertexIterator vertici = vertices();
        EdgeIterator edge = edges();
        while(vertici.hasNext()){
          Elem[i]=vertici.nextVertex();
        }
        while(edge.hasNext()){
          Elem[i]=edge.nextEdge();
        }
        return (new ArrayPositionIterator(Elem));
      }
    }

  2. #2
    Hai implementato tutti i metodi di DirectedGraph?
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    20
    Hai ragione manca questa implementazione inAdjacentVertices...scusate ma sto davanti a questi codici da stamane alle 5, mi sa che devo prendere un pò d'aria...grazie per la risposta Matteo982.

  4. #4
    Di niente...

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  5. #5
    nel titolo deve essere presente anche il linguaggio... (come da regolamento)
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.