1
/*
 * 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"));
    }


}
4

6 回答 6

2

试试StringBuffer#reverse内置的反向方法。

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

System.out.println(result);

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

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

未来的暗示

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

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;            
    }
于 2013-06-18T07:43:56.413 回答
2

您的问题是您将变量用作类变量,即substr, temp, strLength, reversed应该在revString()内。然后它工作。

固定的:

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"));
}

}
于 2013-06-18T07:48:44.767 回答
1

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

public String reverseString(String r){
   if (r.length()<2){
       return r;
   }
   else {
       return r.charAt(r.length()-1)+ reverseString(r.substring(0,r.length()-1));
   }
}

如果要使用当前方法,请将以下变量(已声明为实例变量)保留在方法局部范围内。

Character ch;
String substr="";
String temp="";
int strLength=0;
String reversed="";
于 2013-06-18T07:49:58.740 回答
0
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);
            if(temp.length()==str.length())
                return temp;
            temp=temp+ch;                        
            substr=str.substring(0,strLength-1); 

            if(substr.equals("")){reversed=temp; return reversed;}
            temp=temp+revString(substr);  
        }
        return reversed;         
    }


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


}
于 2013-06-18T07:58:03.490 回答
0

您不应将类属性用于局部变量。

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

N + 
NA +
NAW +
NAWA +
NAWAP
=
NNANAWNAWANAWAP

因为 temp 是为每个调用共享的。将 substr、temp、strLength 的声明颠倒在 revString() 的开头。

于 2013-06-18T07:53:55.607 回答
0

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

return temp+revString(substr);  

return temp;

您的代码工作正常。

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

于 2013-06-18T07:48:53.437 回答