2

我正在努力用 Java 解决问题。如何使用 giveCode() 方法返回对象的整数值。这是我们的讲师预先编写的代码,我们必须使用它来为对象返回一个整数值,在为哈希表创建哈希值时使用它。

哈希码.java

// Interface for HashCode. Has only one method declaration
public interface HashCode {

    // For an input object, computes and returns its HashCode as an integer
        public int giveCode(Object o);

}

StringHashCode.java(我创建了这个类,因为我们应该在这个类中实现 HashCode 类)

public abstract class StringHashCode implements HashCode{


} 

我在我的主目录中尝试过这样的事情,只是为了简单地返回代码值,所以我可以看到它是如何工作的,但似乎没有任何效果:

System.out.println(new StringHashCode.giveCode(example_object));

或者

System.out.println(new StringHashCode.giveCode(example_object.hashCode()));

或者

System.out.print(HashCode.giveCode(example_object));

我对Java很陌生,但是我对其他OOP语言有很多经验,但是我似乎无法理解这个问题,我觉得这可能很愚蠢,但我无法理解.

4

3 回答 3

1

由于您的讲师给了您该接口,因此您必须实现它。那可能是一堂课。它可以是您可能不需要的另一个接口,抽象类对您的解决方案没有用处,因此请使用简单类并实现该接口。

class HashCodeImpl implements HashCode {
    @Overwide
    public int getCode(Object obj) {
        return obj.hashCode();
    }
}

在 main 方法中,这个类应该用作

class Main {
    public static void main(String[] args){
        HashCodeImpl impl = new HashCodeImpl();
        System.out.println(impl.getCode(new String()));
    }
}

现在在您的问题中,我不知道您如何没有得到任何输出,因为您的系统都不会编译。

 System.out.println(new StringHashCode.giveCode(example_object));

此类的 giveCode 方法不是静态的,因此无法编译

 System.out.println(new StringHashCode.giveCode(example_object.hashCode()));

同样的原因 giveCode 不是静态的,所以它不会编译,你必须传入一个对象和类,假设返回有代码。在这种情况下,您将哈希码传递给方法。

 System.out.print(HashCode.giveCode(example_object));

编译错误,因为 HashCode 是一个类似于原型的接口,您必须实现它才能创建具体类。

于 2013-10-15T23:28:58.903 回答
0
  1. 使类非抽象
  2. 编写方法实现
  3. 你少了括号

解决这些问题,它会更好地为您服务。

 public class StringHashCode implements HashCode{

    public int giveCode(Object o) {
        return o.hashCode(); // Replace this with your own implementation
    }
} 


System.out.println(new StringHashCode().giveCode(example_object));
于 2013-10-15T23:18:52.610 回答
0
  1. 您正在尝试在不使用 () 的情况下实例化该类。你会想要new StringHashCode()的。
  2. 您正在尝试实例化一个抽象类,这是不可能的。
  3. 你还没有在任何地方实现 giveCode 方法,所以自然不能调用它。
于 2013-10-15T23:20:18.557 回答