我已经尝试编写这段代码,但它似乎没有多大作用,我对 Lisp 列表的概念有点陌生,因此我不明白我应该做什么,无论如何这是我尝试过的:
import java.util.*;
public class removNum{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("Enter a list (of integers): ");
String str = in.nextLine();
LispList<Integer> list = parseIntLispList(str);
System.out.println("The list you entered is:");
System.out.println(list);
System.out.println("Enter an integer:");
list = removePos(list);
System.out.println(list);
}
public static LispList<Integer> parseIntLispList(String str){
String line = str.trim();
String contents = line.substring(1,line.length()-1).trim();
if(contents.length()==0)
return LispList.empty();
String[] nums = contents.split(",");
LispList<Integer> list = LispList.empty();
for(int i=nums.length-1; i>=0; i--){
String num = nums[i].trim();
list = list.cons(Integer.parseInt(num));
}
return list;
}
public static LispList removePos(LispList list, int n){
if(0==n){
return list.getTail();
}
else{
return new LispList(list.getHead(),removePos(list.getTail(),n-1));
}
}
}
基本上我要做的是编写一个递归方法,该方法采用列表和整数 x,并删除列表中位置 x 的整数,例如,如果列表是 [2,5,6,40,8,9,45] 并且整数是 2,该方法应该返回 [2,5,40,8,9,45],因此位置 2 的整数从列表中删除。
我不希望有人为我写解决方案,但朝着正确的方向推动将不胜感激。提前谢谢。
在 http://www.dreamincode.net/forums/topic/317223-delete-elements-in-the-list-using-lisplist/回答了一个非常相似的问题
我不知道您使用的LispList
类是否实现了java.util.List
接口,但如果实现了,您可能会查看 http://docs.oracle.com/javase/7/docs/api/java/util/List.html 中描述的indexOf
和subList
方法。