import java.util.*;
public class ArrayList5 {
static int max(ArrayList list) { // to be completed
if (list.size() == 0) {
return 0;
}
else
{
int first = (Integer) list.get(0);
list.remove(0);
if (first > max(new ArrayList(list)))
{
return first;
}
else
{
return max(list);
}
}
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
Collections.addAll(list, 4, 5, 3, 2, 3, 1, 3);
// int t=Console.readInt("Enter Target:");
int res1 = max(new ArrayList(list));
System.out.println("max=" + res1);
}
}
我不明白为什么需要max(new ArrayList(list)))
部分。为什么它必须创建一个新的,为什么它不能继续使用一个列表?
同样为什么它不会陷入循环(它的递归,所以它会继续发送一个新的列表,所以我不明白为什么'first'每次都不会是4)?
答案 0 :(得分:1)
实际上,有许多不需要的多余代码会使代码变得繁琐/难以阅读/理解。
您可以大量简化代码并删除对ArrayList的任何引用,这些引用并非真正必要,并且在正确的位置使用适当的泛型,使代码实际可读。
您无需在整个地方投射或创建列表。
public class ArrayList5 {
static int max(final List<Integer> list) {
if(list.isEmpty()) return 0;
final int head = list.get(0);
final List<Integer> tail = list.subList(1, list.size());
return (head > max(tail)? head:max(tail));
}
public static void main(final String... args) {
final int res1 = max(Arrays.asList(4, 5, 3, 2, 3, 1, 3));
System.out.printf("max=%d", res1);
}
}
答案 1 :(得分:0)
你应该试试这个:
static int max(ArrayList<Integer> list) {...}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
Collections.addAll(list, 4, 5, 3, 2, 3, 1, 3);
// int t=Console.readInt("Enter Target:");
int res1 = max(new ArrayList(list));
System.out.println("max=" + res1);
}
编译器可能会抛出警告,因为您没有声明ArrayList的类型。