JAVA 简单递归的问题,请指教

两个小问题
1. 一个arraylist存有string “good”,"hello" 和" Hi”
想写一个函数 doubleElements(Arraylist<string> arraylist)把这个arraylist变成
"good" "good" "hello" "hello" "Hi" "Hi"
用recurssion递归来调用完成,不可以用for while等loop,不可以在外部设参数。

2. 函数removeShorterOfPairs(Arraylist<string> arraylist)要求实现,偶数个string,两两进行对比,remove那个短的string,如果相等,remove后面那个
其他要求同第一题

如果可以设外部参数我能写出来,关键是参数只能再内部用,那么每次调用自身的时候参数又会初始化了。比较迷惑

请高手不吝赐教
在第二个问题中,函数的作用是这样的,比如一个8个string的arraylist,那么经过函数处理后应该只剩下4个string。1,2; 3,4 ; 5,6; 7,8 两两比较各会消去一个

1L 我在函数里定义了一个final originalN 来表示arraylist初始的长度,可是我用debug跑的时候每次还是会重新赋值...

finial int temp = 15;
表示temp的值永远为15,不可改变!!!!

函数名已经确定 doubleElements(Arraylist<string> arraylist)
removeShorterOfPairs(Arraylist<string> arraylist)了吗?

不能增加传递参数? 比如doubleElements(Arraylist<string> arraylist, int level)什么的?

如果不行 你看下这个方法行不:

Arraylist<string> doubleElements(Arraylist<string> arraylist)
{
Arraylist<string> temp1;
拷贝arraylist的第一个string于temp1;
拷贝arraylist的第一个string于temp1;
如果arraylist元素个数大于1个
{
Arraylist<string> temp2;
拷贝arraylist的第二个元素到最后一个元素于temp2;
把doubleElements(temp2)所有元素加在temp1后;
}
return temp1;
}

Arraylist<string> removeShorterOfPairs(Arraylist<string> arraylist)
{
Arraylist<string> temp1;
比较arraylist第一第二个元素
拷贝符合条件的string于temp1;
如果arraylist元素个数大于2个
{
Arraylist<string> temp2;
拷贝arraylist的第三个元素到最后一个元素于temp2;
把removeShorterOfPairs(temp2)所有元素加在temp1后;
}
return temp1;
}

以上只是思路,可以优化代码,内存的,希望对你有所帮助
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-25
虽然不可以定义成员变量,但是方法中可以带入一个参数,利用带入的参数可以写

import java.util.ArrayList;

public class Digui {
public ArrayList<String> doubleElement(ArrayList<String> list,int size){
String str=list.get(size);
list.add(str);
size--;
if(size<0){
return list;
}else{
return doubleElement(list,size);
}
}

public ArrayList<String> removeShorterOfPairs(ArrayList<String> list,int size){
String str1=list.get(size);
String str2=list.get(size-1);
if(str1.length()<str2.length()){
list.remove(size);
}else{
list.remove(size-1);
}
size=size-2;
if(size>=1){
return removeShorterOfPairs(list,size);
}else{
return list;
}

}
public static void main(String[] args) {
Digui d=new Digui();
ArrayList<String> list=new ArrayList<String>();
list.add("good");
list.add("hello");
list.add("hi");
list.add("nice");
System.out.println(d.doubleElement(list, list.size()-1));
System.out.println(d.removeShorterOfPairs(list, list.size()-1));

}

}
第2个回答  2010-09-25
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test {
public static void main(String[] args) throws Exception {
List<String> list = new ArrayList<String>();
list.add("good");
list.add("hello");
list.add("hi");
list = doubleElements(list);
System.out.println(list);
}
public static List<String> doubleElements(List<String> arraylist){
if(arraylist!=null&&arraylist.isEmpty())
return null;
String l1 = arraylist.get(0);
String l2 = arraylist.get(1);
if(!l1.equals(l2)){
arraylist.remove(0);
arraylist.add(l1);
arraylist.add(l1);
doubleElements(arraylist);
}
return arraylist;
}
}

我帮你写一个 你看看吧 不可以写外部参数的话 其实还可以把方法头改成
doubleElements(Arraylist<string> arraylist,int i)本回答被提问者采纳
第3个回答  2010-09-25
如果不想让参数改变,可以选择final去声明参数。
问题补充没有明白什么意思。
相似回答