只是简单的反向字符串方法。FYI,正确的方法是reverseString1和reverseString2,但是revereStirng3()不能给出正确的输出。我认为这是因为方法args和返回值存储在堆栈中,并且与这个概念相关。但我不清楚为什么revereStirng3()不能正确工作。请告诉我为什么这不管用。
这就是我所理解的,如果我错了,请纠正我。1.main()调用revereStirng3(A),其中传递的参数数组A存储在main()的堆栈框架中。
发布于 2013-09-09 15:43:52
好的,考虑到zenbeni已经得到了真正的结果,下面是所发生的事情。
Java中的数组是一个对象,所以在revereString1
和revereString3
中,是对数组的引用的副本。因此,您的更改修改了原始数组,该数组(在第一个方法执行之后)已被反转。当然,第二次执行会再次逆转它,因此您将得到反向的反转,即原始字符串。
尝试使用一个新的、本地定义的数组来创建反向字符串,一切都会正常工作。
发布于 2013-09-09 15:45:08
来自apache commons:
StringUtil.reverse(str);
发布于 2013-09-09 15:59:42
我复制了你的方法并执行了它。
System.out.println(revereStirng3("abcdef".toCharArray()));
结果是
fedcba
。
问题在于主要功能:
public static void main(String[] args) {
String s = "abcdef";
char[] A = s.toCharArray();
System.out.println( revereStirng3(A)); // print out "abcdef"**
revereStirng1(A);
System.out.print(Arrays.toString(A)); // print out "fedcba"
System.out.println(revereStirng2(s)); // print out "fedcba"
}
你的评论没有显示出真相。
它的有效输出将是
fedcba
[a,b,c,d,e,f]
fedcba
这是因为您对三个测试用例在相同的数组上操作。在第二步中,您将所有反转数组作为输入传递。这导致命令没有改变。
https://stackoverflow.com/questions/18701747
复制相似问题