我头疼,调试困难。我正在尝试比较两个通用值,以便可以根据值将它们插入到数组中进行排序。这是我第一次使用Comparable和Comparator界面,因此围绕这些问题的任何其他建议都是不错的选择。
这是我的班级设置方式:
public class SVStore<K, V extends Comparable<V>> implements Pairs<K, V>, Iterable<K>, Comparable<V>, Comparator<V> {
put()方法:
@Override public V put(K key, V value) { SVData<K, V> tab[] = table; for (int i = 0; i < table.length - 1; i++) { if (value.compareTo(tab[i].dataValue) <= 0) { int index = i; for( int j = index; j < size - 1; j++){ tab[j + 1] = tab[j]; } } tab[i].setDataKey(key); tab[i].setDataValue(value); size++; } return value; }
这些是我要实现的compareTo()和compare方法。
@Override public int compareTo(V t) { return compare(t, this); } @Override public int compare(V t, V t1) { if (t.equals(t1)){ return 0; } else if (t < t1){ return -1; } else { return 1; } }
我遇到的第一个问题是compareTo()方法中的问题,它以“ this”为中心。该错误显示为“必填:V,V找到:V,SVStore”。我知道答案不是将“ this”转换为V。如何将其与该数组索引中的V进行比较?
我遇到的第二个问题是…} if(t <t1){在compareTo()方法中。错误是“二进制运算符’<’的错误操作数类型,第一类型:V第二类型:V”。如果将两种类型都识别为V,为什么它是错误的操作数?
我认为所需的所有代码都在那里。我尝试使它们尽可能简洁,但是如果有人需要任何其他代码,我很乐意提供。干杯!
多亏了Chrylis,Catalin Pol和Louis Wasserman的共同努力,我才知道我需要将课堂改正为:
public class SortedValueStore<K, V extends Comparable<? super V>> implements PairStore187<K, V>, Iterable<K>, {
我不再需要编写自己的compareTo()方法。
这成功了。我对Java相对较新,因此花了我一段时间才能理解每个人的说法,但是每个人都坚持不懈地努力。感谢大家的帮助!