Results 1 to 2 of 2
Thread: Please help!
- 04-27-2012, 10:20 AM #1
Member
- Join Date
- Apr 2012
- Posts
- 1
- Rep Power
- 0
Please help!
Hi,
I'm a beginner in Java programming. Sorry for any silly mistakes
I'm trying to do a uniform cost search program on a graph but I have some problems in the code.
I'm not sure if my algorithm works correctly or not.
This is the problem I get:
Exception in thread "main" java.lang.ClassCastException: Edge cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQ ueue.java:578)
at java.util.PriorityQueue.siftUp(PriorityQueue.java: 574)
at java.util.PriorityQueue.offer(PriorityQueue.java:2 74)
at java.util.PriorityQueue.add(PriorityQueue.java:251 )
at UCS.UnifromCostSearch(UCS.java:86)
at UCS.main(UCS.java:115)
This is my program:
Any help is greatly appreciatedJava Code:import java.util.*; class Vertex { public String name; public Vertex Parent; public Edge[] adjacencies; public int weight; public Vertex vertex; public Vertex(String vertexName) { name = vertexName; } public int getWeight() { return weight; } public void setWeight(int vertexWeight ) { weight = vertexWeight; } public Edge[] getAdjacencies() { return adjacencies; } public void setAdjacencies(Edge[] adjacencies) { this.adjacencies = adjacencies; } } class Edge { public int weight; public Vertex vertex; public Edge(Vertex vertexTarg, int vertexWeight) { vertex = vertexTarg; weight = vertexWeight; } } public class UCS { public static void UnifromCostSearch(Vertex Start, Vertex Goal) { PriorityQueue Fringe = new PriorityQueue(); ArrayList explored = new ArrayList(); Fringe.add(Start); int cost =0; Vertex goal = Goal; while(!Fringe.isEmpty()) { Vertex Parent = (Vertex)Fringe.poll(); cost += Parent.getWeight(); if(Parent == goal) { System.out.println("Goal is found: " + goal); break; } explored.add(Parent); Edge[] children = Parent.getAdjacencies(); for(int i =0; i < children.length;i++) { Fringe.add(children[i]); } } } public static void main(String[] args) { Vertex v0 = new Vertex("Redvile"); Vertex v1 = new Vertex("Blueville"); Vertex v2 = new Vertex("Greenville"); Vertex v3 = new Vertex("Orangeville"); Vertex v4 = new Vertex("Purpleville"); v0.adjacencies = new Edge[]{ new Edge(v1, 5), new Edge(v2, 10), new Edge(v3, 8) }; v1.adjacencies = new Edge[]{ new Edge(v0, 5), new Edge(v2, 3), new Edge(v4, 7) }; v2.adjacencies = new Edge[]{ new Edge(v0, 10), new Edge(v1, 3) }; v3.adjacencies = new Edge[]{ new Edge(v0, 8), new Edge(v4, 2) }; v4.adjacencies = new Edge[]{ new Edge(v1, 7), new Edge(v3, 2) }; Vertex[] vertices = { v0, v1, v2, v3, v4 }; UnifromCostSearch(v0, v4); } }
- 04-27-2012, 10:36 AM #2
- Join Date
- Sep 2008
- Location
- Voorschoten, the Netherlands
- Posts
- 11,604
- Blog Entries
- 7
- Rep Power
- 17
Re: Please help!
Have you read the API documentation for the PriorityQueue class? It needs its elements to have an order; i.e. for elements A and B it needs to decide whether A < B or A > B or A == B; that makes sense for a priority queue ... The elements need to implement the Comparable interface and your Edge class doesn't do that so your Java virtual machine complains.
kind regards,
JosWhen people rob a bank they get a penalty; when banks rob people they get a bonus.


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks