gpt4 book ai didi

java - 为什么在调用以接口(interface)作为构造函数参数的类时出现 'source not found' 错误?

转载 作者:行者123 更新时间:2023-12-01 05:19:32 24 4
gpt4 key购买 nike

我正在尝试使用接口(interface)创建一些字符串排序方法。应用程序驱动程序类调用主 SimplePriorityQueue 对象类,但它在进行此调用时传入实现该接口(interface)的类作为参数。有几个类实现该接口(interface)(一个按长度比较,一个按字母顺序(按值)比较,一个按反向长度等),这就是为什么我被告知 SimplePriorityQueue 类中的一个构造函数应该能够处理所有这些。

使用 Eclipse 调试器时,只要 Application 类执行 pq = new SimplePriorityQueue(new StringByLength()); 行,就会弹出“找不到源”错误。如代码注释中所示。

这是我所拥有的:

<小时/>
//the Interface
package cs15200.review.srijitag;

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

}
<小时/>

这是排序类之一。还有好几个,不过几乎都是这样的

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


}
<小时/>

我知道这种基本格式(作为参数传递实现接口(interface)的对象,并使用该接口(interface)类型的对象作为参数)应该有效,因为我成功地尝试了以下简单示例:

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 类的构造函数中做错了什么?预先感谢您的帮助。

最佳答案

您实现了 java.util.Comparator 而不是 cs15200.review.srijitag.Comparator,其中未找到 java.util.Comparator 源当你调试时。

关于java - 为什么在调用以接口(interface)作为构造函数参数的类时出现 'source not found' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com