1

インターフェイスを使用していくつかの文字列ソートメソッドを作成しようとしています。アプリケーションドライバクラスは、メインのSimplePriorityQueueオブジェクトクラスを呼び出しますが、この呼び出しを行うときに、インターフェイスを実装するクラスを引数として渡します。インターフェイスを実装するクラスはいくつかあります(1つは長さで比較し、1つはアルファベット順(値で)、もう1つは逆の長さなど)。そのため、SimplePriorityQueueクラスの1つのコンストラクターですべてを処理できるはずです。

Eclipseデバッガーを使用する場合、Applicationクラスが行pq = new SimplePriorityQueue(new StringByLength());を実行するとすぐに、「sourcenotfound」エラーがポップアップ表示されます。コードコメントに示されているように。

これが私が持っているものです:


//the Interface
package cs15200.review.srijitag;

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

}

これがソートクラスの1つです。他にもいくつかありますが、それらはすべてほぼ同じです

//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;


}

次の簡単な例を試してみたので、この基本的な形式(インターフェイスを実装するオブジェクトを引数として渡し、そのインターフェイスのタイプのオブジェクトをパラメーターとして使用する)が機能するはずです。

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");

    }
}

では、SimplePriorityQueueクラスのコンストラクターで何が間違っているのでしょうか。よろしくお願いします。

4

1 に答える 1

0

デバッグ時にソースが見つからないjava.util.Comparator代わりに実装しました。cs15200.review.srijitag.Comparatorjava.util.Comparator

于 2012-05-17T14:27:46.570 に答える