Java 我在方法中得到了正确的反向字符串,但当我返回main()时,它将错误的字符串显示为输出

Java 我在方法中得到了正确的反向字符串,但当我返回main()时,它将错误的字符串显示为输出,java,Java,尝试内置的反向方法 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package revstring; /** * * @author Pawan */ public class RevString { private String substr=""; private String temp=""; priv

尝试内置的反向方法

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package revstring;

/**
 *
 * @author Pawan
 */
public class RevString {

    private String substr="";
    private String temp="";
    private static int strLength=0;
    private String reversed="";

   public String revString(String str)
    {
        Character ch;

        strLength=str.length();
        System.out.println("length- "+strLength);

        if(strLength!=0)
        { 
            ch=str.charAt(strLength-1);          
            temp=temp+ch;                        
            substr=str.substring(0,strLength-1); 
            if(substr.equals("")){reversed=temp; return reversed;}
            return temp+revString(substr);  
        }
        return reversed;         
    }


    public static void main(String[] args) {
       RevString rev=new RevString();
       System.out.println("reversed string- "+rev.revString("PAWAN"));
    }


}

另一方面,代码中的问题是,您的类成员应该是方法变量,这意味着您有太多的状态。问题恰恰在于
temp
变量。要修复此问题,请将此行添加到方法的开头:

String str= "reverse";
StringBuffer sb= new StringBuffer(str);
//reverse
String result= sb.reverse().toString();

System.out.println(result);

未来提示

如果不打算在其他方法中使用变量/由其他类读取,请不要将变量作为类成员(字段)放置。类成员仅用于状态。在方法中本地化所有变量

 public String revString(String str)
 {
    temp = ""; //this line
    Character ch;
尝试内置的反向方法

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package revstring;

/**
 *
 * @author Pawan
 */
public class RevString {

    private String substr="";
    private String temp="";
    private static int strLength=0;
    private String reversed="";

   public String revString(String str)
    {
        Character ch;

        strLength=str.length();
        System.out.println("length- "+strLength);

        if(strLength!=0)
        { 
            ch=str.charAt(strLength-1);          
            temp=temp+ch;                        
            substr=str.substring(0,strLength-1); 
            if(substr.equals("")){reversed=temp; return reversed;}
            return temp+revString(substr);  
        }
        return reversed;         
    }


    public static void main(String[] args) {
       RevString rev=new RevString();
       System.out.println("reversed string- "+rev.revString("PAWAN"));
    }


}

另一方面,代码中的问题是,您的类成员应该是方法变量,这意味着您有太多的状态。问题恰恰在于
temp
变量。要修复此问题,请将此行添加到方法的开头:

String str= "reverse";
StringBuffer sb= new StringBuffer(str);
//reverse
String result= sb.reverse().toString();

System.out.println(result);

未来提示

如果不打算在其他方法中使用变量/由其他类读取,请不要将变量作为类成员(字段)放置。类成员仅用于状态。在方法中本地化所有变量

 public String revString(String str)
 {
    temp = ""; //this line
    Character ch;

您的问题是将变量用作类变量,即substr、temp、strLength、REVERSE应该在revString()中。 然后它就起作用了

固定的:

public static class RevString {

    public String revString(String str)
    {
        int strLength=str.length();
        System.out.println("length- "+strLength);

        String reversed=str;
        if(strLength!=0)
        { 
            Character ch=str.charAt(strLength-1);          
            String temp=""+ch;                        
            String substr=str.substring(0,strLength-1); 
            if(substr.equals("")){reversed=temp; return reversed;}
            return temp+revString(substr);  
        }
        return reversed;            
    }

您的问题是将变量用作类变量,即substr、temp、strLength、REVERSE应该在revString()中。 然后它就起作用了

固定的:

public static class RevString {

    public String revString(String str)
    {
        int strLength=str.length();
        System.out.println("length- "+strLength);

        String reversed=str;
        if(strLength!=0)
        { 
            Character ch=str.charAt(strLength-1);          
            String temp=""+ch;                        
            String substr=str.substring(0,strLength-1); 
            if(substr.equals("")){reversed=temp; return reversed;}
            return temp+revString(substr);  
        }
        return reversed;            
    }

temp变量已包含完全反转的字符串。如果你更换

public class RevString {


public String revString(String str) {
    String substr="";
    String temp="";
    int strLength=0;
    String reversed="";
    Character ch;
    strLength=str.length();
    System.out.println("length- "+strLength);

    if(strLength!=0)
    { 
        ch=str.charAt(strLength-1);          
        temp=temp+ch;                        
        substr=str.substring(0,strLength-1); 
        if(substr.equals("")){reversed=temp; return reversed;}
        return temp+revString(substr);  
    }
    return reversed;         
}


public static void main(String[] args) {
   RevString rev=new RevString();
   System.out.println("reversed string- "+rev.revString("PAWAN"));
}

}

您的代码工作正常


@sotix当然是对的:您不应该像这样使用成员变量。

临时变量已经包含完全颠倒的字符串。如果你更换

public class RevString {


public String revString(String str) {
    String substr="";
    String temp="";
    int strLength=0;
    String reversed="";
    Character ch;
    strLength=str.length();
    System.out.println("length- "+strLength);

    if(strLength!=0)
    { 
        ch=str.charAt(strLength-1);          
        temp=temp+ch;                        
        substr=str.substring(0,strLength-1); 
        if(substr.equals("")){reversed=temp; return reversed;}
        return temp+revString(substr);  
    }
    return reversed;         
}


public static void main(String[] args) {
   RevString rev=new RevString();
   System.out.println("reversed string- "+rev.revString("PAWAN"));
}

}

您的代码工作正常


@sotix当然是对的:您不应该像这样使用成员变量。

如果您尝试递归,那么您可以稍微简化您的方法:

return temp;

如果您正在尝试递归,则可以稍微简化您的方法:

return temp;

您不应该对局部变量使用类属性

如果运行代码,您将获得:

Character ch;
String substr="";
String temp="";
int strLength=0;
String reversed="";
因为每次通话都会共享temp。
将substr、temp、strLength的声明放在revString()的开头

不应该对局部变量使用类属性

如果运行代码,您将获得:

Character ch;
String substr="";
String temp="";
int strLength=0;
String reversed="";
因为每次通话都会共享temp。
将substr、temp、strLength的声明放在revString()的开头

你的代码给我这个输出
length-5 length-4 length-3 length-2 length-1 reversed string-NNANAWNAWANAWAP
你的代码给我这个输出
length-5 length-4 length-3 length-2 length-1 reversed string-NNANAWNAWANAWAP