/*
* 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"));
}
}
问问题
206 次
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 回答