简单的反向字符串方法。 仅供参考,正确的方法是reverseString1和reverseString2, 但是revereStirng3()并没有给我正确的输出。 我认为这是因为方法args和返回值存储在Stack中并与此概念相关。但我不清楚为什么revereStirng3()无法正常工作。 请让我知道这不起作用。
这是我理解的,如果我错了,请纠正我。 1. main()调用revereStirng3(A),其中此传递参数数组A存储在main()的堆栈帧中。
revereStirng3(char [] A)这个传递的参数数组A存储在revereStirng3的方法框架中,这意味着main的A []被复制到revereStirng3的堆栈框架的方法参数A []。
反转后,revereStirng3为返回String创建新的String(A)。
然后,我想,在主要的,返回新的String(A)是正确打印反向字符串,但实际上没有。
//给定一个字符串“abcdef”,将其反转。所以输出应该是“fedcba”
import java.util.*;
public class ReverseString {
static String revereStirng3(char[] A) {
int n = A.length;
for(int i=0; i<n/2; i++) {
char temp = A[n-i-1];
A[n-i-1] = A[i];
A[i] = temp;
}
return new String(A);
}
static void revereStirng1(char[] A) {
int n = A.length;
for(int i=0; i<n/2; i++) {
char temp = A[n-i-1];
A[n-i-1] = A[i];
A[i] = temp;
}
}
static String revereStirng2(String str) {
char[] A = str.toCharArray();
int n = A.length;
for(int i=0; i<n/2; i++) {
char temp = A[n-i-1];
A[n-i-1] = A[i];
A[i] = temp;
}
return String.valueOf(A);
}
public static void main(String[] args) {
String s = "abcdef";
char[] A = s.toCharArray();
System.out.print( revereStirng3(A) + "\n" ); **// print out "abcdef"**
System.out.println( "" );
revereStirng1(A); // print out "fedcba"
for(int i=0; i<A.length; i++)
System.out.print( A[i] );
System.out.println( "" );
System.out.print( revereStirng2(s) + "\n" ); // print out "fedcba"
System.out.println( "" );
}
}
答案 0 :(得分:1)
好的,鉴于zenbeni已经取得了真正的成果,这就是正在发生的事情。
Java中的数组是一个对象,因此在revereString1
和revereString3
中,您可以获得数组引用的副本。因此,您的更改会修改原始数组(在第一个方法执行之后)已反转。当然,第二次执行会再次反转它,所以你得到反向的反向,这是原始的String。
尝试使用新的本地定义的数组来创建反向的String,一切都会正常工作。
答案 1 :(得分:0)
来自apache commons:
StringUtil.reverse(str);
答案 2 :(得分:0)
我已经复制了你的方法并执行了它
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
这是因为您在三个测试用例的同一阵列上运行。在第二步中,您将已经反转的数组作为输入传递。这导致订单没有改变。