调用和调用方法中的Java方法参数

时间:2013-09-09 15:27:00

标签: java

简单的反向字符串方法。 仅供参考,正确的方法是reverseString1和reverseString2, 但是revereStirng3()并没有给我正确的输出。 我认为这是因为方法args和返回值存储在Stack中并与此概念相关。但我不清楚为什么revereStirng3()无法正常工作。 请让我知道这不起作用。

这是我理解的,如果我错了,请纠正我。 1. main()调用revereStirng3(A),其中此传递参数数组A存储在main()的堆栈帧中。

  1. revereStirng3(char [] A)这个传递的参数数组A存储在revereStirng3的方法框架中,这意味着main的A []被复制到revereStirng3的堆栈框架的方法参数A []。

  2. 反转后,revereStirng3为返回String创建新的String(A)。

  3. 然后,我想,在主要的,返回新的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( "" );
    
    
        }
    }
    

3 个答案:

答案 0 :(得分:1)

好的,鉴于zenbeni已经取得了真正的成果,这就是正在发生的事情。

Java中的数组是一个对象,因此在revereString1revereString3中,您可以获得数组引用的副本。因此,您的更改会修改原始数组(在第一个方法执行之后)已反转。当然,第二次执行会再次反转它,所以你得到反向的反向,这是原始的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

这是因为您在三个测试用例的同一阵列上运行。在第二步中,您将已经反转的数组作为输入传递。这导致订单没有改变。