簡體   English   中英

LinkedList無法轉換為布爾值,我在做什么?

[英]LinkedList can not be converted to boolean, what am i doing wronge?

我目前正在學習Java。 今天,我正在編寫一個小程序,在該程序中輸入數字,如果數字未排序,該程序將寫入。

我認為我的邏輯是正確的,但是我有一個我無法處理的小錯誤。

package inlamningsuppgift_arSorterad;

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;

public class ifSorted {

    public static void main(String[] arg) {
        LinkedList a = new LinkedList();
        Scanner sc = new Scanner(System.in);
        System.out.println("Input your numbers, end with the letter \\n");

        while (sc.hasNextDouble())
            a.add(sc.nextDouble());

        if (ifSorted(a))
            System.out.println("List is sorted");
        else
            System.out.println("List is not sorted");
    }

    private static boolean ifSorted(LinkedList a) {
        Collections.sort(a);

        return a;
    }
}

讓我們看看您的aerSorterat方法。

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

private static boolean意味着您的方法將返回一個true或false的布爾值。您插入了列表[a],然后返回了[a]。沒有布爾值。使用您的代碼,您不需要該方法。但是,必須剪切if else語句不在循環中,以便在用戶插入ex:out的String之后。 它可以在循環外檢查列表。如果需要,可以使用該方法,方法是在其中插入if else語句並返回true或false,然后使用ifsorted.aerSorterat(a)在主方法中調用該方法;

進行替換! 它與Java8兼容:

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

2- .equal(a)新列表比較當前

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

實際上,您實際上是在嘗試使用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;
}

只需將運算符交換為降序即可。 例如,可以與字符串列表一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM