LinkedList无法转换为布尔值,我在做什么wronge?

时间:2017-02-21 11:36:15

标签: java linked-list boolean

我目前正在学习Java。今天我正在制作一个小程序,我输入数字,程序应该写,如果它们是否排序。

我认为我的逻辑是正确的,但我得到了一个我无法处理的错误。

foo

3 个答案:

答案 0 :(得分:0)

让我们来看看你的aerSorterat方法。

    private static boolean aerSorterat(LinkedList a) {
    Collections.sort(a);
    return a;
}

private static boolean意味着你的方法将返回一个true或false的布尔值。你插入list [a]然后返回[a]。没有布尔值。用你的代码你不需要那个方法。但是你必须从循环中删除if else语句,以便在用户为ex:out插入一个String之后。它会在循环中检查您的列表。如果您需要,可以使用该方法,在其中插入if else语句并返回true或false,然后使用ifsorted.aerSorterat(a)在main方法中调用该方法;

答案 1 :(得分:0)

进行替换!它适用于Java8:

1- a.stream()。sorted()。collect(Collectors.toList()创建一个新的排序列表

2-。等于(a)新列表比较当前

private static boolean ifSorted(LinkedList a) {
      return a.stream().sorted().collect(Collectors.toList()).equals(a);        
}

答案 2 :(得分:0)

您实际上是尝试使用Collections.sort(a)对列表进行排序,但如果您想查看您的值是否已排序,则可以执行以下操作:像这样的循环:

private static boolean isSorted(List<Double> list) {
    return ascending(list) || descending(list);
}

如果您必须同时检查两种方式,则可以使用与||连接的两种方法轻松完成此操作,这是一种逻辑。 单个方法只检查列表中的所有值是否比其前任更大(升序)或更小(降序)。

private static boolean ascending(List<Double> list) {
    for (int i = 1; i < list.size(); i++)
        if (list.get(i - 1) > list.get(i))
            return false;
    return true;
}

private static boolean descending(List<Double> list) {
    for (int i = 1; i < list.size(); i++)
        if (list.get(i - 1) < list.get(i))
            return false;
    return true;
}

如果其中一个值不符合前提,则只返回false。如果循环完成并保持正常,则表示所有值都已排序。

但要做到这一点,您必须将通用参数<Double>作为参数提供给您的方法,否则您无法将这些值与<>进行比较。另外,我使用List代替LinkedList,因为有了这个,您可以使用任何类型的List。

如果您想使用除数字之外的其他对象,则需要稍微更改一下。

首先,您要使用的对象必须实现Comparable接口,该接口提供compareTo(...)方法。给出的是,你可以这样,例如如下:

public boolean ascending(List<YourObject> list) {
    for (int i = 1; i < list.size(); i++)
        if (list.get(i-1).compareTo(list.get(i)) > 0)
            return false;
    return true;
}

只需将操作符换成降序。这例如可以与字符串列表一起使用。