1

I am trying to create a few string sorting methods using an interface. The Application driver class calls the main SimplePriorityQueue object class, but it passes in a class implementing the interface as the argument when it makes this call. There are several classes implementing the interface (one to compare by length, one alphabetically (by value), one by reverse length, etc), which is why I'm told one constructor in the SimplePriorityQueue class should be able to handle them all.

When using the Eclipse debugger, the 'source not found' error pops up as soon as the Application class executes the line pq = new SimplePriorityQueue(new StringByLength()); as indicated in the code comment.

Here is what I have:


//the Interface
package cs15200.review.srijitag;

public interface Comparator {
    public int compare(Object o1, Object o2);

}

Here is one of the sorting classes. There are several more, but they are all almost exactly like this

//StringByLength class, which sorts by length
package example.cs151xx;

import java.util.Comparator;


public class StringByLength implements Comparator {

  public int compare(Object o1, Object o2)
  {
    String s1 = (String)o1;
    String s2 = (String)o2;
    return s2.length() - s1.length();
  }

  public boolean equals(Object o)
  {return (o instanceof StringByLength);}
}

//the relevant portion of the Application class

import example.cs151xx.Prompt;
import cs15200.review.srijitag.SimplePriorityQueue;

import example.cs151xx.StringByLength;
import cs15200.review.srijitag.StringByLengthReverse;
import cs15200.review.srijitag.StringByValue;
import cs15200.review.srijitag.StringByValueIgnoreCase;
import cs15200.review.srijitag.IntegerIncreasing;

import java.util.Comparator;


public class Application {

  ////////////////
  //Driver Program
  ////////////////

    public static void main(String[] args)
    {
    //Construct object to test; let the user specify what Comparator
    //  object to construct to order the priority queue

      SimplePriorityQueue pq;
      char howPrioritize = Prompt.forChar("Enter how to prioritize queue\n  v (by value)\n  i (value ignore case)\n  l (by length)\n  r (by reverse length)\n\nChoice","virl");
      if (howPrioritize == 'v')
        pq = new SimplePriorityQueue(new StringByValue());
      else if (howPrioritize == 'i')
        pq = new SimplePriorityQueue(new StringByValueIgnoreCase());
      else if (howPrioritize == 'l')
        pq = new SimplePriorityQueue(new StringByLength()); //ERROR THROWN
      else
        pq = new SimplePriorityQueue(new StringByLengthReverse());

[...more code to finish up rest of driver class]

//The relevant parts SimplePriorityQueue class which has the constructors, accessors, and methods

package cs15200.review.srijitag;

import example.cs151xx.StringByLength;
import java.util.Comparator;

public class SimplePriorityQueue{
    public SimplePriorityQueue(Comparator whatever){
        check = whatever;
    }

    public void enqueue(Object item){

        if(list.length==rear+1)
            doubleSize();
        if (rear==-1)
            list[0]=item;
        else{
            for(int i=rear;i>=0;i--){
                int z = check.compare(item,list[i]);
                if(z<=0){
                    list[i+1]=list[i];
                    list[i]=item;                       }
                else{
                    list[i+1]=item;
                }
            }
        }
        rear++;
    }

[...more accessors and mutators]

          //instance variables
    private Object[] list=new Object[1];
    private int rear=-1;
    private Comparator check;


}

I know this basic format (passing in as an argument the an object that implements the interface, and using as a parameter an object of the type of that interface) should work because I successfully tried the following simple example:

package  cs15200.review.srijitag;
import example.cs151xx.StringByLength;
import java.util.Comparator;

public class temp {


    public static void main(String[] args) {
        Comparator z = new StringByLength();
        System.out.println( z.compare("hi", "what's up"));
        Comparator y = new StringByValue();
        System.out.println(y.compare("hi", "what's up"));

        System.out.println( lookee(new StringByLength())); //should return the same result as z.compare(...)
        System.out.println(lookee(new StringByValue())); //should return the same result as y.compare(...)
    }

    public static int lookee(Comparator test){
        return test.compare("hi", "what's up");

    }
}

So what am I doing wrong in the constructor in the SimplePriorityQueue class? Thanks in advance for your help.

sinetrogue
  • 13
  • 2
  • After reading the thread at [link](http://stackoverflow.com/questions/6807607/source-not-found-problem-when-debugging-constructor) I tried step returning as far as I could and then stepping into again, and it worked. In fact, just running the application (not debugging) also ran without problems. But I'd still like to know why the source not found error comes up – sinetrogue May 17 '12 at 17:05

1 Answers1

0

You implemented java.util.Comparator instead of cs15200.review.srijitag.Comparatorin which java.util.Comparator source not found when you debug.

Pau Kiat Wee
  • 9,485
  • 42
  • 40