2013-06-18 19 views
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")); 
    } 


} 
+0

你代碼給我此輸出'長度 - 5 長度 - 4 長度 - 3 長度 - 2 長度 - 1 逆轉與字符串NNANAWNAWANAWAP' – Averroes

回答

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;    
    } 
2

你的問題是,你用你的變量作爲類變量,即SUBSTR,溫度,strLength,逆轉應該是內部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")); 
} 

} 
0

臨時變量已經包含了完全相反的字符串。如果更換

return temp+revString(substr); 

return temp; 

您的代碼工作正常。

@sotix當然是對的:你不應該使用這樣的成員變量。

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=""; 
0

您不應該對局部變量使用類屬性。

如果你運行你的代碼,你將獲得:

N + 
NA + 
NAW + 
NAWA + 
NAWAP 
= 
NNANAWNAWANAWAP 

由於溫度是每個呼叫共享。 把你的substr,temp,strLength的聲明放在revString()的開頭。

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


} 
相關問題