【发布时间】:2019-05-29 19:51:12
【问题描述】:
嗨, 更新:感谢您的所有建议
假设,这个练习就像一个重复, 我有一个用 Cons 和 Nil 的概念制作的数字列表,
List l = new Cons(**3**, new Cons(**2**,new Cons(**1**, new
Cons(**4**, new Cons(**1**, new Nil())))));
我想递归地计算其中有多少紧跟一个较小的数字。
例如
[5,0,5,3].count() == 2, [5,5,0].count() == 1
count()方法是我做的(不能有任何参数),其余的都是默认的,我不能做其他方法或者使用已经定义好的add() ,尺寸()...
“NEXT”必须在当前元素之后具有下一个值,但我无法得到解决方案。
欢迎任何解决方案。
abstract class List {
public abstract boolean empty();
public abstract int first();
public abstract int count();
}
class Cons extends List {
private int elem;
private List next;
public Cons(int elem, List next) {
this.elem = elem;
this.next = next;
}
public boolean empty(){
return false;
}
public int first(){
return elem;
}
@Override
public int count() {
if(elem>NEXT) {
return 1 + next.count();
}else {
return next.count();
}
}
```
【问题讨论】:
-
为什么你不能使用
List像add()和size()这样的方法? -
因为 List 是为此练习创建的一种类型,而不是现有类型。此外,练习的文本说您不能添加其他方法
-
好的我明白了,你可以看看我的回答,看看是否符合你的要求。关于方法创建限制,是不是不允许创建新的抽象方法或一般方法?如果是后者,那么我将需要重新考虑我的方法。
-
练习的文本说:è vietato usare cast o definire altri metodi oltre a quelli presenti。 L'invocazione del metodo count non deve modificare in alcun modo la lista L,从意大利语翻译过来的意思是:禁止使用 cast 或定义除现有方法之外的其他方法。方法计数的调用不应以任何方式修改列表 L。
-
有完整的练习imgur.com/a/SKBv2RT