JAVA 写一个reverse的method,用来倒序输出参数

method是答案提供的代码,我试了却不能倒序输出.......

import java.util.*;

public class tut5 {
public static void main(String args[]) {
String s = "abc";
List<String> b = new ArrayList<String>();
b.add(s);
//System.out.println(reverse(s));
System.out.println(reverse(b));
}
public static <Element> List<Element> reverse(List<Element> list) {
return reverse(list, 0);
}

private static <Element> List<Element> reverse(List<Element> list, int first) {
if (first == list.size())
return list;
else {
List<Element> result = reverse(list, first + 1);
result.add(list.get(first));
return result;
}
}

输出[abc, abc]
我没看懂为什么输出了 两个 原来的 ?

谢谢各位!

你好,题目你首先要理解对了,这个是反转参数的,不是把一个字符串给反转了。你给的代码用的是递归的思想理解起来比较复杂,我重写了下。你试着看看:
public class BaiduTest09 {

public static void main(String args[]) {
String param1 = "a";
String param2 = "b";
String param3 = "c";
List<String> b = new ArrayList<String>();
b.add(param1);
b.add(param2);
b.add(param3);
System.out.println("反转前 : " + b);
//Collections.reverse(b) ; 其实这个方法就可以实现了。
System.out.println("反转后 : " + reverse(b));
}

public static <Element> List<Element> reverse(List<Element> list) {
List<Element> newlist = new ArrayList<Element>() ;
for (int i=list.size()-1;i>=0;i--) {
newlist.add(list.get(i));
}
return newlist ;
}
}追问

非常感谢你!!
你的代码我试了,也很容易理解...
但是您能否帮我解答一下我原来那段代码为什么会输出两个原来的参数呢?很难理解...
谢谢

追答

你知道递归吗?看我的分析去理解。
* 用你的例子举例,元素少,递归的次数也就少,比较简单。
* 运行步骤如下:
* 调用 reverse(list,0)
* if 不成立
* 创建一个result
* 调用 reverse(list,1)
* if 成立
* 返回了list --> abc
* 将list的值赋给了result --> abc
* 执行result.add(list.get(first)) ; --> abc,abc
* 返回result --> abc,abc

温馨提示:内容为网友见解,仅供参考
无其他回答

JAVA 写一个reverse的method,用来倒序输出参数
public static void main(String args[]) { String param1 = "a";String param2 = "b";String param3 = "c";List<String> b = new ArrayList<String>();b.add(param1);b.add(param2);b.add(param3);System.out.println("反转前 : " + b);\/\/Collections.reverse(b) ; 其实这个...

用java写一段代码实现倒叙输出一段字符 如:abcd输出dcba,
java倒序输出:public static void main(String[] args) { String a = "abcde"; \/** 从最后一个字符开始,倒叙一个字母一个字母的输出 *\/ for (int i = a.length() - 1; i >= 0; i--) { System.out.print(a.charAt(i)); } }JS获取复选框的值(必须...

java 输入10个数按相反的顺序输出
import java.util.Scanner;import java.util.StringTokenizer;public class ReverseData { public static void main(String[] args) { \/\/ TODO Auto-generated method stub Integer[] data = new Integer[10];Scanner in = new Scanner(System.in);System.out.println("请输入10个数,数与数之间用...

LinkedList中用递归的方法把一串数字倒序输出,急,好的追分,谢谢!
public void reverseOrder(LinkedList<Integer> returnList,LinkedList<Integer> changeList){ Integer i = changeList.poll();if(changeList.size() == 0){ returnList.offer(i);}else{ reverseOrder(returnList,changeList);returnList.offer(i);} } } 方法因人而异,递归的话自己写了个方法,...

1. 编写一个java程序,实现字符串大小写的转换并倒序输出. 要求如下:
package p1;public class J_ReadTxt{private static String reverse ( String input ){if (input.isEmpty ()){return "";}String end = input.substring (input.length () - 1, input.length ());char[] cs = end.toCharArray ();if (cs[0] <= 'Z' && cs[0] >= 'A'){end = ...

怎么用java实现,题目是:将一个英文句子逆序输出,例如 I am a student...
java实现字符串逆序输出单词方式如下:实现思路:先将字符串变为字符串数组,然后逆序赋值给另一个字符串数组,最后再利用StringBuffer转变为字符串输出,方法如下:public class Demo{public static void main(String[] args){String str = "I am a student";String str1 = wordsReverse(str);\/\/输出...

在JAVA中如何将一个字符串中的内容倒过来再放入另一个字符串中?例如输...
其实不需要用for循环,StringBuffer中已经提供了倒置的方法,貌似方法名也是叫reverse。public static String reverse(String str2){ StringBuffer sb = new StringBuffer(str2);return sb.reverse().toString();}

java中倒序输出:给定一个5位整数,编码输出它的倒序数。(如给定数字12345...
使用StringBuffer类中的reverse方法。除此之外也可以使用String活着char[]实现咯。就是麻烦点。然后你那个程序思路也可以,不过还须提供位数,将位数相乘啊,你这样直接加“int sum =gw+sw+bw+qw+ww;”怎么行呢?五位数对吧,那你最后还得做个反向循环相乘,再相加。得出的结果才正确啊。

Java中怎么用将一篇文章倒序输出,比如:my name is jim,输出后是:jim...
基本上满足你的要求了,从文件读入,写入到文件。排序有两种方式。代码如下:package com.io.demo;import java.io.*;public class LxDemo { public static void main(String[] args) { LxDemo lx = new LxDemo();String str = lx.read("D:\\\\MyCode\\\\demo.txt");System.out.println(str);\/...

java编程,给出一个3位整数,按相反的顺序输出该数.即若输入247,则输出7...
int numa = 10; int tmp = numa; java.util.List<Integer> lst = new java.util.ArrayList<Integer>(); while(tmp != 0) { int ys = tmp%10; lst.add(ys); tmp = tmp\/10; } int newnum = 0; int len = lst.size(); for(int i = 0; i <...

相似回答