[英]Arraylist and recursive implementation
我正在嘗試概述該函數的Java遞歸實現,如果列表中的所有元素均為一位數字(即<10),則該函數將返回true。 可以假設列表僅包含正數。
這是我嘗試過的方法,但是即使列表中有2位數字,它也始終返回true。
導入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);
}
}
有什么建議嗎? 提前致謝。
我認為您可能希望稍微翻轉一下邏輯,以便僅在數組中沒有元素時才返回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
}
您的程序看起來不錯,唯一的問題是,遇到第一個元素>= 10
時應立即返回false
,並且列表大小為0
時應返回true
。 如下所示進行修改:
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
檢查。
我認為這是您想要的方法。
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);
}
}
我剛剛更改了您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.