2016-05-04 165 views
-1

我想概述一個函數的java遞歸實現,如果列表中的所有元素都是單個數字(即< 10),則返回true。可以假設列表只包含正數。Arraylist和遞歸實現

這是我所嘗試過的,但即使列表中有一個2位數的數字,它也會保持原樣。

import java.util。*;

公共類Q3B {

static boolean allSingleDigit(ArrayList list) { 
    if (list.size() == 0) 
     return false; 
    else { 
     int first = (Integer) list.get(0); 
     list.remove(0); 

     if (first < 10) 
      return true; 
     else 
      return allSingleDigit(list); 
    } 

} 

public static void main(String[] args) { 
    ArrayList<Integer> list = new ArrayList(); 
    Collections.addAll(list, 4, 25, 3, 2, 3, 1, 3); 
    boolean res1 = allSingleDigit(new ArrayList(list)); 
    System.out.println("List Contains all single number" + res1); 
} 

}

任何建議傢伙? 在此先感謝。

回答

5

我想你可能想稍微翻轉邏輯,只有當數組中沒有元素時才返回true;

static boolean allSingleDigit(ArrayList list) { 
if (list.size() == 0) 
    return true; 
else { 
    int first = (Integer) list.get(0); 
    list.remove(0); 

    if (first < 10) 
     return allSingleDigit(list); 
    else 
     return false 
} 
+0

哦,沒有wiat,它現在工作。我忘了在開始時回覆真實。 –

+1

它是工作的人。 謝謝 –

2

你的計劃似乎很好,唯一的問題是,你應該儘快返回false在遇到第一個元素>= 10並返回true當列表大小爲0。修改,如下所示:

static boolean allSingleDigit(List<Integer> list) { 
    if (list.size() == 0) 
    return true; 

    int first = list.remove(0); 

    if (first == null || first >= 10) 
    return false; 
    else 
    return allSingleDigit(list); 

} 

你可以對其進行優化,並通過使用通用List和使用remove()方法從List直接更簡潔。我還補充說缺少null檢查。

+0

我改成了 \t如果(第一> = 10) \t \t \t返回假; \t \t \t其他 \t \t \t \t回allSingleDigit(名單); \t \t} 現在我所有的時間都是假... –

+0

對不起,我錯過了第一個'if'子句。更新它。 –

+0

它也在工作, 感謝您的幫助 –

0

我認爲這是您想要的方法。

static boolean allSingleDigit(ArrayList list) { 
    if (list.size() == 0) 
     return true; 
    else { 
     int first = (Integer) list.get(0); 
     list.remove(0); 

     if (first >= 10) 
      return false; 
     else 
      return allSingleDigit(list); 
    } 

} 

我剛更改了你的代碼。