2013-05-23 3 views
0

Eclipse에서 혼란스러운 오류가 발생하지만 Linux의 명령 행에서 주 서버에는 오류가 발생합니다. 모든 코드는 eclipse의 주 src 디렉토리에 있습니다. 코드가 명령 줄에서 컴파일하지만 내 맥 OS X 노트북에 이클립스에서이 오류가 발생합니다 :java.lang.NoSuchMethodError : Graph : method <init>() V 찾을 수 없음

Exception in thread "main" java.lang.NoSuchMethodError: Graph: method <init>()V not found 
    at Lab17.main(Lab17.java:11) 

코드

Lab17.java

import java.io.IOException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.Scanner; 
public class Lab17 { 

// Lab17 first attempt at creating a graph 

    public static void main(String[] args) throws Exception { 

     Graph myGraph = new Graph(); 

     URLConnection conn = null; 
     try { 
      URL url = new URL("http://csc.mendocino.edu/~jbergamini/222data/flights/flights"); 
      conn = url.openConnection(); 
     } catch (IOException e) { 
      System.out.println("Unable to open Flights file"); 
      System.exit(1); 
     } 
     Scanner s = null; 
     try { 
      s = new Scanner(conn.getInputStream()); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     while (s.hasNext()) { 
      String src = s.next(); 
      String dst = s.next(); 
      s.next(); 
      double cost = s.nextDouble(); 
      //System.out.println(src+" "+dst+" "+cost); 
      myGraph.addEdge(src, dst, cost); 
     } 

     System.out.println(myGraph.breadthFirst("Austin", "Washington"));  
     System.out.println(myGraph.depthFirst("LosAngeles", "Washington")); 
     System.out.println(myGraph.breadthFirst("LosAngeles", "Washington")); 
     System.out.println(myGraph.depthFirst("Washington", "LosAngeles")); 
     System.out.println(myGraph.breadthFirst("Washington", "LosAngeles")); 

    } 

} 

Graph.java

import java.util.LinkedList; 
import java.util.Map; 
import java.util.NoSuchElementException; 
import java.util.TreeMap; 

public class Graph { 

    private TreeMap<String, Vertex> vertexMap; 

    /** Creates a new, empty graph */ 
    public Graph() { 
     // create vertexMap for Graph 
     vertexMap = new TreeMap<String, Vertex>(); 

    } 

    /** 
    * Adds an edge 
    * @param src the source vertex 
    * @param dst the destination vertex 
    * @param cost the weight of the edge 
    */ 
    public void addEdge(String src, String dst, double cost) { 
     //System.out.println(src+" "+dst+" "+cost+" in Graph()"); 
     // check to see if there is a src vertex 
     if(vertexMap.get(src) == null) { 
      // if src Vertex does not exist create Vertex for src 
      vertexMap.put(src, (new Vertex(src))); 
      //System.out.println(vertexMap.get(src).toString()); 
     } 

     // check to see if there is a dst Vertex 
     if(vertexMap.get(dst) == null) { 
      // if dst Vertex does not exist create Vertex for dst 
      vertexMap.put(dst, (new Vertex(dst))); 
      //System.out.println(vertexMap.get(dst).toString()); 
     } 

     // populate the dst and cost for Edge on the src Vertex vertexMap element 
     Vertex srdVertex = vertexMap.get(src); 
     Vertex dstVertex = vertexMap.get(dst); 
     Edge sEdge = new Edge(dstVertex, cost); 
     srdVertex.addEdge(sEdge); 
    } 

    /** Clears/empties the graph */ 
    public void clear() { 
     vertexMap = new TreeMap<String,Vertex>(); 
    } 

    /** 
    * Traverses, depth-first, from src to dst, and prints the vertex names in the order visited. 
    * @param src the source vertex 
    * @param dst the destination vertex 
    * @return whether a path exists from src to dst 
    */ 
    public boolean depthFirst(String src, String dst) { 
     System.out.println("Depth-first from "+src+" to "+dst); 
     for(Map.Entry<String,Vertex> entry: vertexMap.entrySet()) { 
      String key = entry.getKey(); 
      Vertex thisVertex = entry.getValue(); 

      System.out.println(key + " => " + thisVertex.toString()); 
     } 
     return false; 
    } 

    /** 
    * Traverses, breadth-first, from src to dst, and prints the vertex names in the order visited 
    * @param src the source vertex 
    * @param dst the destination vertex 
    * @return whether a path exists from src to dst 
    */ 
    public boolean breadthFirst(String src, String dst) { 
     System.out.println("Breadth-first from "+src+" to "+dst); 
     // find starting vertex in vertexMap 
     Vertex start = vertexMap.get(src); 
     LinkedList<Vertex> vertexQue = new LinkedList<Vertex>(); 
     LinkedList<Vertex> visitedV = new LinkedList<Vertex>(); 
     // check it for null 
     if(start == null) { 
      throw new NoSuchElementException(" Start vertex not found"); 
     } 

     // create a Queue for searching through vertex edges 
     //Queue<Vertex> q = new Queue<Vertex>(); 
     vertexQue.add(start); 
     start.dest = 0; 
     boolean found = false; 
     while(!vertexQue.isEmpty() && !found) { 
      Vertex v = vertexQue.removeLast(); 
      if(v.toString() == dst) { 
       // print queue 
       found = true; 
      } 
      else if(!visitedV.contains(v)){ 
       // put all the adj vertex's into the queue 
       for(Edge e: v.getEdges()) { 
        Vertex w = e.getDst(); 
        vertexQue.add(w); 
       } 
      } 
      // add v to visitedV linked list 

      if(!visitedV.contains(v)){ 
       visitedV.add(v); 
      } 
     } 

     System.out.print("["); 
     for(int i=0; i < visitedV.size(); i++) { 
      System.out.print(visitedV.get(i)+", "); 
     } 
     System.out.println("]"); 

     /*forVertex> entry: vertexMap.entrySet()) { 
      String key = entry.getKey(); 
      Vertex thisVertex = entry.getValue(); 

      System.out.println(key + " => " + thisVertex.toString()); 

      for(Edge e : thisVertex.getEdges()){ 
       System.out.print(e.toString()); 
      } 
      System.out.println(); 
      System.out.println("All Edges Evaluated"); 
     }*/ 
     return false; 
    } 
} 

Vertex.java

import java.util.Set; 
import java.util.TreeSet; 

public class Vertex { 

    private String name; 
    private TreeSet<Edge> adj; 
    public double dest; 

    /** 
    * Creates a new vertex 
    * @param name the name of the vertex 
    */ 
    public Vertex(String name) { 
    this.name = name; 
    adj = new TreeSet<Edge>(); 
    } 

    public TreeSet<Edge> getEdges() { 
     return this.adj; 
    } 

    /** 
    * Returns the set of all edges starting from this vertex. 
    * Set shall be ordered with respect to the names of the destination vertices. 
    */ 
    public Set<Edge> allAdjacent() { 
     Set<Edge> vertexSet = adj; 

     return null; 
    } 

    public String toString() { 

    return name; 
    } 

    public void addEdge(Edge e) { 

     this.adj.add(e); 
    } 
} 

public class Edge implements Comparable<Edge> { 

    private Vertex dst; 
    private double cost; 

    /** Creates a new edge with an associated cost 
    * @param dst the destination vertex 
    * @param cost the weight of the edge 
    */ 
    public Edge(Vertex dst, double cost) { 
    this.dst = dst; 
    this.cost = cost; 
    } 

    public Vertex getDst() { 
     return dst; 
    } 

    @Override 
    public int compareTo(Edge o) 
    { 
     if(o == null) 
      return -1; 
     if(this == null) 
      return -1; 
     if(this.dst.toString().compareTo(((Edge)o).dst.toString()) == 0) 
      return 0; 
     else if (this.dst.toString().compareTo(((Edge)o).dst.toString()) < 0) 
      return 1; 
     else 
      return -1; 
    } 

    public String toString() { 
     String theEdgeS = this.dst.toString()+" "+Double.toString(cost); 
     return theEdgeS; 
     } 
} 

확실하지 왜 이클립스 환경은 명령 줄 환경이 다르게 코드를 치료한다. 수업은 진행중인 수업입니다. 나는 이클립스 버그처럼 보이는 것을 해결하려고하고있다.

+0

어떤 라인이 11 번 라인인지 알려주실 수 있습니까? 또한 전체 스택 추적을 넣으십시오. 제목과 질문에서 왜 다른 예외가 있습니까? –

+2

'Graph myGraph'는'Lab17'에서'Graph' 클래스는 어디에 있습니까? 가져 오기가 필요합니다. – Bill

+1

@Bill 같은 패키지에 있다면 가져올 필요가 없습니다. –

답변

0

실행하면 Graph.class가 클래스 경로에서 발견되지 않습니다.

1

Code compiles at command line but produces this error in Eclipse

가능성있는 솔루션 : 1) 명령 줄을 통해 사용으로 일식 동일한 코드를 사용하고 있는지 확인합니다. 2) 원본이 변경된 것과 관계없이 이전 클래스 파일을 계속 참조하는 것처럼 케이스가 일식 일 수 있으므로 이클립스 내부를 깨끗하게 빌드하십시오.

관련 문제