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

あなたの問題は、変数をクラス変数として使用することです。つまり、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 に答える
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 に答える
0

temp 変数には、完全に反転された文字列が既に含まれています。交換すれば

return temp+revString(substr);  

return temp;

あなたのコードは正しく動作します。

もちろん、@sotix は正しいです。このようなメンバー変数を使用しないでください。

于 2013-06-18T07:48:53.437 に答える