[英]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.