【问题标题】:CompareTo methods from comparable with list来自可比较列表的 CompareTo 方法
【发布时间】:2015-05-04 08:59:09
【问题描述】:

我已经写了这个问题的答案,但是在 Netbeans 上它在这一行显示错误:

        if (key.compareTo(obj) <= 1) 

问题是: 编写一个静态方法,该方法采用具有自然顺序的对象列表或集合,对象 List 或 Set 的基类型和一个整数 n,如果至少有 n 个对象,则返回 true List 或 Set 根据其自然顺序大于对象参数,false 否则。

我的尝试:

public static <T extends Comparable<? super T>> boolean question9(List<T> list, List obj, int n) {

            int count = 0;
            for (T key : list) {
                if (key.compareTo(obj) <= 1) {
                    count++;
                }
            }
            if (n > count) {
                return false;
            } else {
                return true;
            }
        }

【问题讨论】:

  • “显示错误”。你能更具体一点吗?另外,重写这个: if (n > count) { return false; } 其他 { 返回真; } 作为返回 n
  • 为什么是List obj?此外,key.compareTo(obj) &lt;= 1 永远不是正确的检查。

标签: java comparable compareto


【解决方案1】:

你的作业说(强调我的):

编写一个静态方法,该方法采用具有自然顺序的对象列表或集合,列表或集合的基本类型的对象

这并不意味着objListSet!这意味着obj 必须是T

另外,你的测试不好。 Comparable 合约表示对于两个对象 xy,如果 x.compareTo(y) 大于 0,则认为 x 大于 y

因此将您的测试更改为:

if (key.compareTo(obj) > 0)

此外,您的最终测试可以简化为:

return count >= n;

你甚至可以使用快捷方式:

public static <T extends Comparable<? super T>> boolean question9(
    final Collection<T> collection, // assignment says List or Set
    final T obj, int n)
{
    int count = 0;
    for (final T element: collection) {
        if (element.compareTo(obj) <= 0)
            continue;
        if (++count >= n)
            return true;
    }
    return false;
}

【讨论】:

  • Ohhhhh 这是有道理的......因为 obj 也需要是通用的,因为如果 List 是一个 Integer,那么 obj 也应该是一个 Integer..我想!计时器到期后,谢谢将标记为正确
  • 还有一个问题,那就是你的测试。查看更新的答案。
  • 啊,是的,我又犯了一个愚蠢的错误,感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多