2017-02-21 71 views
0

我目前正在學習Java。今天我正在製作一個輸入數字的小程序,如果它們被排序,程序就會寫入。LinkedList無法轉換爲布爾值,我在做什麼?

我想我的邏輯是正確的,但我得到了一個我無法處理的錯誤。

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; 
    } 
} 
+2

你用一個返回類型的布爾值定義了你的方法,但是然後嘗試返回一個LinkedList。 –

+1

你的功能'aerSorterat'是錯誤的。如果我的swedish是正確的,這個函數應該返回一個布爾值來表示列表是否被排序。但是,您正在對實際列表進行排序並將其返回。 – marstran

+0

@marstran對不起瑞典語,我現在把它改成了英文。你的意思是說我把aerSorterat名單上的整個名單歸還? – TheNoob

回答

0

使此替換!它Java8工作:。

1- a.stream()排序()收集(Collectors.toList()創建一個新的排序列表

2- .equal(一)新的列​​表來比較當前

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

非常感謝您的提示!它實際上有效! 我剛剛有一個問題,爲什麼我必須做一個新的sortedList? – TheNoob

+0

@TheNome:如果你喜歡我的回答,請將其標記爲已接受 – Bogojob

+0

我抨擊它! :) – TheNoob

0

讓我們看看你的aerSorterat方法。

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

私有靜態布爾意味着你的方法將返回這是真或假。你插入列表[A],然後返回一個布爾值[A]。無布爾。隨着你的代碼你不需要這種方法。但是,您必須將if語句從循環中刪除,以便在用戶爲ex:out插入一個字符串之後。它可以在循環中檢查你的列表。如果你想插入你的if語句並返回true或false,然後在main方法中使用ifsorted.aerSorterat(a)調用該方法,可以使用該方法。

+0

首先,感謝您的回答。 二,如果我明白你的權利,我應該把我的if - else語句在公共靜態布爾ifSorted方法? :) – TheNoob

+0

是的,你可以做到這一點。或者我說你甚至不需要該方法只是提取if-else仍然在main方法中的循環,所以當用戶插入除double之外的其他東西時,它會跳出循環然後去你的if-else語句。 –

+0

感謝您的幫助! :) – TheNoob

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,因爲有了這個,你可以使用任何你想要的列表。

如果您想使用除數字之外的其他對象,則需要對其進行一些更改。

首先可能性是,要使用的對象必須實現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; 
} 

只需交換運營商降序。例如,可以與字符串列表一起使用。

+0

非常感謝!我也工作得很好! :) 我可以用這個方法與對象嗎? – TheNoob

+0

不客氣。我會改變其他對象的答案。 –

+0

謝謝,我想我可以在將來使用它;) – TheNoob